반응형
메모리는 데이터를 보관하는 장소
byte(8bit) 단위로 저장됨.
모든 변수는 주소를 가짐.
포인터는 메모리 주소를 값으로 가지는 변수로 * 을 사용하여 선언
int * ptr;
ptr 은 포인터 변수다. (정수형 포인터 변수)
연산자 &는 변수로 부터 변수의 주소를 추출함.
위와같은 예제에서 정수형 변수 a가 1000 번 메모리에 할당되어 있고, 포인터 변수 p는 1012번 메모리에 할당되어 있고, a 변수의 주소를 저장하도록 하면,
1000번 메모리에는 a 에 저장되어있는 12 라는 정수값이 저장되어 있고, 1012번 메모리에는 변수 a 의 주소값인 1000이 저장되어 있다.
//arr1.c #include <stdio.h> int main() { int x =1, y = 2; int * ip; ip = &x; printf("%x, %x \n", ip, &x); printf("%d, %d \n", x, y); y = *ip; printf("%d, %d \n", x, y); *ip = 0; printf("%d, %d \n", x, y); return 0; } |
//arr1 실행 결과 bd01a7dc, bd01a7dc 1, 2 1, 1 0, 1 |
위 예제에서는 x, y 변수에 각각 1, 2 라는 값을 저장해 놓고 ip 라는 포인터 변수에는 x 변수의 주소값을 저장한다.
이후 y에 포인터 변수 ip가 가리키는 x의 값을 저장하도록 하여(y = *ip) y 에 1 이라는 값이 저장됨을 확인 할 수 있으며,
포인터 변수 ip 가 가리키는 주소의 값을 0으로 변경하도록 하여(*ip = 0) x 에 0 이 저장됨을 확인 할 수 있다.
이 과정을 그림으로 표현하면 다음과 같다.
반응형
'자료구조' 카테고리의 다른 글
문자열 - 3 (0) | 2022.11.17 |
---|---|
문자열 - 2 (0) | 2022.11.17 |
문자열 - 1 (0) | 2022.11.17 |
배열, 포인터, 동적 메모리 - 3 (0) | 2022.11.15 |
배열, 포인터, 동적 메모리 - 2 (0) | 2022.11.15 |