2010. 7. 10. 02:05

제 18장 포인터의 이해 - 2



포인터에 다양한 타입이 존재하는 이유

 - "포인터 타입참조할 메모리의 크기 정보 제공"

 - 포인터 int* a, char* b,  이 두 포인터변수의 크기는 얼마일까?
    > sizeof연산자를 이용 : printf(" %d byte ", sizeof(a) );

 - 포인터의 크기는 32비트 운영체제에서 무조건 4byte다

 - 주소값을 보관하는 변수이기때문에, 주소값 자체는 4byte;

 - 굳이 왜 포인터에 type를 두느냐??
   > 포인터는 자료형도 같이 기억을 한다. 
   > 메모리값 보관량은 4byte, 어떤 변수든 크기에 상관없다. 


 ※ 포인터는 주소값일까?

 - pointer = 주소값 + 자료형(int*, char*....) 

 - 자료형도 포인터란 개념에 포함되기때문에 
   항상 가르키는 자료형에 맞게 선언을 해줘야 한다.


예제_0)=============================================================   

#include <stdio.h>

int main()
{
int a = 10;
int *pA = &a;     //a는 4byte

double E = 3.14;
double *pE = &E;

printf("%d %f", *pA, *pE);

return 0;
}

예제_1)=============================================================   

int main()
{
int *pA ; // 컴퓨터내, 임의의 어딘가를 가리키고 있다(쓰레기값으로 초기화)
*pA = 10; // 위험한 선언이다.
return 0;
}

예제_2) ============================================================   

#include <stdio.h>

int main()
{
int *pA = 100;  // pA가 가르키는곳이 어딘데 100을 대입하겠다는건가?
// 당연히 이건 오류가 된다.
*pA = 10;
return 0;
}

==================================================================   

위의 예제_1 에서 만약에 pA 포인터변수가 컴퓨터내의 중요한 부분을 가리킬 수 있다.
물론 운영체제가 지금은 너무 좋아져서, 위의 예제는 크게 위험하지 않지만,
그게 허용이 된다면..상당히 위험해진다.
Posted by 토실토실천재