본문 바로가기

자료구조

배열, 포인터, 동적 메모리 - 1

반응형

메모리는 데이터를 보관하는 장소

byte(8bit) 단위로 저장됨.

모든 변수는 주소를 가짐.

 

sum 변수와 sum 변수의 주소

 

포인터는 메모리 주소를 값으로 가지는 변수로 * 을 사용하여 선언

 

int * ptr; 

 

ptr 은 포인터 변수다. (정수형 포인터 변수)

 

연산자 &는 변수로 부터 변수의 주소를 추출함.

 

 

정수형 변수 a와 그 주소를 바라보는 포인터 p의 메모리 예제

위와같은 예제에서 정수형 변수 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