제 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 포인터변수가 컴퓨터내의 중요한 부분을 가리킬 수 있다.
물론 운영체제가 지금은 너무 좋아져서, 위의 예제는 크게 위험하지 않지만,
그게 허용이 된다면..상당히 위험해진다.
'프로그래밍 > C' 카테고리의 다른 글
제 20장 포인터의 이해 - 그림표현 (0) | 2010.07.10 |
---|---|
제 19장 포인터의 이해 - 예제분석 (0) | 2010.07.10 |
제 17장 포인터의 이해 - 예제 (0) | 2010.07.10 |
제 16장 포인터의 이해 - 1 (0) | 2010.07.10 |
제 15장 1차원 배열 - 2 (0) | 2010.07.10 |