#include <stdio.h>
int main()
{
int i = 0;
char c = 'a';
int *ip = &i;
char *cp = &c;
printf("ip -> i cp -> c\n");
printf("ip : %p ip + 1 : %p\n", ip, ip+1);
printf("cp : %p cp + 1 : %p\n\n", cp, cp+1);
ip = &c;
cp = &i;
printf("ip -> c cp -> i\n");
printf("ip : %p ip + 1 : %p\n", ip, ip+1);
printf("cp : %p cp + 1 : %p\n", cp, cp+1);
return 0;
}
< 결과화면 >
위의 예제에서 보면 int 형 포인터 ip와 char형 포인터 cp는 같은 "포인터 변수" 이므로 서로 다른 자료형의 주소값을
저장시키더라도 warning메시지만 뜨고 error는 나지 않는다.
ip는 int형 포인터 변수이므로 ip에 저장된 주소를 시작으로 4바이트만큼 읽어들임.
cp는 char형 포인터 변수이므로 cp에 저장된 주소를 시작으로 1바이트만큼 읽어들인다.
요점은 포인터 변수는 주소값을 저장하는 변수라는 것.
-> 그래서 포인터 변수의크기는 32bit 주소값을 저장할수 있는 크기인 4바이트
포인터의 자료형에 따라 그 시작 주소에서 그 자료형의 크기만큼 읽는다.
-> int *p 는 저장된 시작 주소값에서 4byte만큼, double *p는 8바이트만큼.
즉, 포인터의 자료형은 메모리 공간의 크기를 참조하는 기준이 된다.
'Embedded Programming > C/C++' 카테고리의 다른 글
연산자 우선순위와 결합방향 (0) | 2013.04.27 |
---|---|
volatile 변수의 쓰임 (0) | 2013.04.11 |
배열을 함수에 전달하기 (배열을 인수로 전달하기) (0) | 2013.04.02 |
포인터 연산 (0) | 2013.04.02 |
배열과 포인터 (0) | 2013.04.01 |