[C] 포인터 복습

pointer에 대해서 다시 공부해보기


이 포스트에서도 포인터에 대해서 간단하게 다루었지만, 배운 내용을 복습할 겸 다시 정리해보고자 한다.

#include <stdio.h>

int main() {

    int* p;
    int i = 3, j;

    p = &i;
    j = *p; // p에 저장된 값인 3을 저장함. 역참조라고도 부름.
    j++; // j에다가 1을 더함.

    printf("%d\n", *p); // 3
    printf("%d\n", p); // i의 주소
    printf("%d\n\n", j); // 4

    p = &j;

    printf("%d\n", *p); // i가 아니라 j를 가리키므로 4가 나온다.
    printf("%d\n\n", p); // j의 주소가 나온다.

    *p = *p + 3; // 주소 p에 저장된 값에다가 3을 더해서 다시 p에 넣어라.
    // 현재 상태에서는 j += 3 과 같은 효력을 가진다.

    printf("%d\n", i); // 3
    printf("%d\n", j); // 7
    printf("%d\n\n", *p); // 7

int* p

p에 주소를 저장하는 포인터 변수형식을 가지며,

int * p
int *p 

와 같이 선언하는 방법도 유효하다.

포인터의 크기

주소를 저장하므로 data 타입과 관계 없이 모두 4 바이트이다. (32비트 기준)
64비트 기준으로는 8 바이트이다.

포인터는 메모리 주소의 제일 상위 값을 가리키며,
그 주소부터 몇 바이트를 읽는 지는 포인터에 저장된 변수의 자료형을 보고 결정한다.

아래 그림을 통해서 설명을 해보겠다.

그림

포인터 변수가 메모리 4칸을 차지하며, 포인터가 변수가 저장된 위치를 가리키며, 변수가 차지하는 메모리 중 최상단의 위치를 가리키는 것이다.

그리고 C언어에서 자료형의 크기는

  • 문자 : 1 바이트
  • 정수 : 4 바이트
  • 실수 : 8 바이트

이다.

위에 있는 값 만큼 최상단 메모리로부터 메모리를 차지하는 것이다.
(정수면 4칸, 실수면 8칸, 문자면 1칸..)


© 2022.07. by Wookey_Kim

Powered by Hydejack v7.5.2