본문 바로가기

C언어

포인터에서 헷갈렸던 부분

포인터에서 헷갈렸던 부분은 많았지만 그 중에서 32비트 환경과 64비트 환경에서 포인터의 차이점포인터의 바이트 수에 대해서 글을 쓰겠다.



1) 32비트 환경과 64비트 환경에서의 포인터의 차이점


32비트 = 4바이트  => 2^32만큼 주소를 표현할 수 있다는 말이다.


64비트 = 8바이트  => 2^64만큼 주소를 표현할 수 있다는 말이다.


따라서 헥사값으로 주소를 표현한다면 32비트 환경에서 주소의 자릿수는 8이고 64비트에서는 16이다.

(나는 32비트 환경에서는 주소가 4바이트만큼표현 될 수 있으니까 256(1바이트)*4까지 표현이 가능하다고 생각했는데 이것은 잘못된 것 ㅠㅠ)



2) 포인터의 바이트 수 


1번 - char * ptr1;

2번 - int * ptr2;



위의 두개의 포인터 변수의 공통점과 차이점은???


1,2번의 공통점은 ptr1, ptr2의 바이트 수가 4바이트라는 것이다(32비트 환경에서는, 만약 64비트 환경이면 8바이트). 그러나 차이점은 *ptr1, *ptr2의 바이트는 1번은 1바이트 2번은 4바이트이다. 간접 참조 연산자를 붙였을때, 바이트의 차이가 나는데 그 이유는 *ptr1이 간접 참조하는 것이 char형이고 *ptr2는 int형이기 때문이다.

(*ptr1과 ptr1의 바이트 수가 4바이트로 같은 줄 알았다....;;;;)






'C언어' 카테고리의 다른 글

c언어에서 return 값을 2개 이상 주는 방법  (4) 2016.10.13