포인터 변수는 다음과 같이 정의할 수 있다..

int *a ;
float *b ;
double *c ;
char *d ;

이렇게 말이다..

그런데 저 포인터 변수들의 크기는 얼마일까??

int 는 4바이트,, double은 8바이트, char는 1바이트 일까??

결론을 말하면.. 모두 4바이트 이다....

포인터 변수는.. 주소값을 저장하는 거지.. 변수의 값을 저장하는 것이

아니기 때문이다...

그렇다면.. 모두 4바이트라면.... 그냥 처음부터..

포인터 변수 자료형을 만들어서 선언하면 되는 것이 아닐까??

예를 들면

point * p ; 같이 말이다....

어차피 모두 4바이트고..

int *a 를 선언했다가.. double 변수의 주소를 받고싶으면...
double d = 1.0f ;
(double *) a = &d ;

처럼 형 변환을 거쳐야 하는 수고도 덜고..

point * p ;
double d = 1.0f ;
p = &d ;

이렇게 쓸 수 있지 않을까???

하지만.. 모든 일에는.. 다 의미가 있는 법..

사실.. 포인터 변수에 형이 필요한 것은.. 포인터 변수 때문이 아니라..

나중에 연산을 하려다 보면 필요한 것이다....

포인터 변수자체는 4바이트 이지만..

나중에 int형 포인터 변수에 int형 주소를 저장하고..

그 int형 포인터가 가리키는 주소의 값을 받아오면..

int형 포인터 변수기 때문에 주소값으로 부터 4바이트의 값을 받아온다...

하지만.. 이것을 하나로 통일해 버리면..

받아올 값이.. int라 4바이트, double이라 8바이트, 머 구조체라서 24바이트 처럼..

컴퓨터가 알아서 가져 올 수 없기 때문에...

우리는 미리 형을 지정해 두어서.. 그 포인터 변수가 어떤 값을 가져올 때..

그 포인터 변수형의 바이트 수 만큼 그 주소에서 읽어 오는 것이다...

그러니 포인터 변수를 사용할 때는 꼭, 받아올 변수의 자료형으로 선언하자!

'프로그래밍 > C,C++' 카테고리의 다른 글

[C,C++] scanf 와 fgets  (0) 2011.08.27
[C,C++] sprintf 사용하기...  (2) 2011.08.23
[C,C++] 문자열에 대하여...  (0) 2011.08.23
[C,C++] 배열의 초기화..  (0) 2011.08.22
[C,C++] C 포인터란 무엇인가..  (0) 2011.08.17
Posted by 바람처럼..
|