프로그래밍

 3198, 1/160 회원가입  로그인  
   yj6393
   [C언어] 포인터좀 알켜 주세요.

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=3470 [복사]


제가 포인터에서 막혀가지고 그런데 개념좀 알켜주세요.

  Hit : 4078     Date : 2012/07/28 06:42



    
해커의품격 쉽게 설명하자면 , 메모리의 주소를 저장할 수 있는 변수입니다.
그래서 32bit 머신에서는 모든 포인터의 크기는 4Byte(=32bit)입니다. 메모리의 위치를 32bit로 나타내기 때문입니다.

C에서는 여러형태의 변수형이 존재하는 만큼 포인터 변수가 존재하는데요.

그럼 어차피 주소인데 왜 여러가지 형태로 정의 되어있냐고 생각하실 수 있는데요. 변수형마다 저장되는 size가 다르기 때문이라고 할 수 있습니다. char 는 1Byte, int는 4Byte 이렇게요. 포인터 변수에 저장되어 있는 값으로 부터 sizeof(변수형) 만큼의 공간에 내가 원하는 변수의 값이 저장되어있다는 것을 알려주는 셈입니다.

예를 들어 float* A = 0xff23ff1
라고 하면, ff23ff1, ff23ff2, ff23ff3, ff23ff4 까지의 메모리 4Byte에 있는 값을 float로 해석이라는 의미가 됩니다.
2012/07/28  
qkrwncks96 일반변수는 값을 저장할수있습니다. 하지만 포인터변수는 메모리주소를 저장합니다.
그리고 포인터변수는 일반변수선언에서 * 만붙히면됩니다.
ex ) int* p; // int 형 데이터를 담은 변수의 주소를 저장할수있는 포인터변수 p 선언

일반변수는 int , char , short 자료형마다 크기가 4 , 1 ,2 바이트로 나뉘어지지만
포인터변수는 int* , char* , short* 은 모두 4바이트크기를 가집니다.

왜냐하면 메모리주소값은 32비트 시스템기준으로 4바이트면 모든 주소값을 표현할수있습니다.
그래서 컴파일러는 64비트 시스템이 포인터변수를 가지고 프로그래밍을 하면
포인터변수의 크기는 8바이트로 처리됩니다. 이유는 아까말씀드렸듯이
32비트시스템은 40억의 메모리주소를 표현할수있지만 64비트는 16억의 메모리주소를 가지므로

포인터변수는 64비트시스템에서는 8바이트로 처리되어야만 합니다. 4바이트로 처리된다면
모든 주소값에 접근을 하지못합니다. 왜냐.. 40억까지밖에 표현하지못하니까요


알다시피 2의 32승은 대략 40억을 조금넘습니다. 2012/08/01
2012/08/01