C언어에서 가장 중요한 것중 하나인 포인터에 대해 알아보자.
1. 개념
메모리 주소를 저장하는 변수이다.
변수 하나당 메모리 어딘가에 고유한 주소가 존재한다.
포인터는 그 주소를 가리키며, 간접적으로 대상 변수에 접근하거나 값을 변경한다.
2. 선언과 초기화
int x = 42;
int *p;
p = &x;
- int *p; : p는 int를 가리키는 포인터
- &x : x의 주소 (주소 연산자)
- 반드시 선언 후 유효한 주소로 초기화해야 함
3. 역참조, 대입
int y = *p;
*p = 100;
- *p : p가 가리키는 메모리의 실제 값
- int y = *p; → y에 x의 값이 복사
- *p = 100; → x의 값이 100으로 변경\
4. 예제
#include <stdio.h>
int main(void) {
int number = 5;
int *p = &number;
printf("처음 값: %d\n", number);
*p = 10;
printf("변경 후 값: %d\n", number);
return 0;
}
- #include <stdio.h>
표준 입출력 함수를 사용하기 위해 선언합니다. - int main(void) {
프로그램의 시작점인 main 함수를 정의합니다. - int number = 5;
number라는 이름의 정수형 변수를 만들고, 그 안에 값을 5로 저장합니다.- 메모리에는 number 상자가 만들어지고, 그 안에 숫자 5가 들어갑니다.
- int *p = &number;
- int *p; 는 ‘정수를 가리키는 포인터’라는 뜻입니다.
- &number 는 number 상자의 메모리 주소를 가져옵니다.
따라서 포인터 p는 number 상자의 위치를 기억하게 됩니다.
- printf("처음 값: %d\n", number);
- %d 자리에 number의 값을 출력합니다.
- 이때 출력 결과는 처음 값: 5 가 됩니다.
- *p = 10;
- *p 는 포인터 p가 가리키는 상자의 실제 값을 의미합니다.
- 여기에 10을 대입하면, number 상자 안의 값이 5에서 10으로 바뀝니다.
- printf("변경 후 값: %d\n", number);
- 다시 number를 출력합니다.
- 이번에는 포인터로 값을 바꿨기 때문에 변경 후 값: 10 이 출력됩니다.
- return 0;
프로그램을 정상 종료합니다. - }
main 함수의 끝을 표시합니다.
가장 중요한 파트라고 봐도 좋을 정도로 어렵고 중요하기 때문에
꼭 여러번 보고 직접 해보는것도 좋을 거 같다.
최대한 이해하도록 노력하자.
'스터디' 카테고리의 다른 글
| HSshell 1차 과제 (0) | 2025.10.08 |
|---|---|
| C언어 - 1차시 (0) | 2025.07.26 |
| C언어 - 배열 (0) | 2025.07.20 |
| C언어 - scanf (0) | 2025.07.20 |
| C언어 - "hello world" 출력하기 (0) | 2025.07.20 |