C

[C] 포인터 변수 a의 (*a)++ / a++ 차이

bunbun2 2023. 7. 5. 14:18

(*a)++; 는 a가 가르키는 값을 증가

a++;는 a에 담긴 주소를 증가

 

short* a;
short b = 2;

a = &b; // 포인터 변수 a에 b의 주소를 할당해서 b를 가리킴

(*a)++; // a가 가리키는 b의 값을 증가
a++; // a의 주소를 증가

포인터 변수는 모두 4바이트를 할당받는다.

char*든 short*이든 void*든 int*든.

 

그 안에 주소를 저장하는데, 마지막 코드인 a++; 에 대해 정리할 것이 있어서 정리해보려고함

 

(*a)++; 가 실행되면 b가 1 증가되어 3이 되는데.

a++가 실행되면 어떨까?

 

a에 담긴 주소가 8이었다면,

1이 증가되어 9가 되는건가?

결론은 2(short의 바이트 크기)가 증가해서 10이 된다.

 

 

변수가 할당되는 메모리는 1byte 단위로 쪼개져 있는데,

 

 

 

short 타입의 b 변수는 2byte의 크기를 가졌기에 두칸의 메모리 공간을 할당받았다.

 

b의 주소값을 담은 a는 b의 시작 주소 8을 담고 있었고,

 

a++; 로 하나 증가시키면, b의 타입의 크기에 맞춰서 주소값이 올라간다 ( short은 2)

바이트당 두개의 16진수로 표기해야 하지만 편의상 한개로 그림

 

int* 였다면 4가 증가할것이고

char* 였다면 1이 증가하는 것