//short형의 포인터 변수가 int형의 데이터를 접근하는 프로그램
#include <stdio.h>
int main()
{
int iNum, *ip; //ip는 int형을 가리키는 포인트 변수
short *sp; //sp는 short형을 가리키는 포인트 변수
iNum = 0x0F5A0B43; //iNum의 초기화
ip = &iNum; //ip의 초기화
printf("iNum : %X ip : %08X \n",iNum, ip);
sp = (short *)ip; //sp가 iNum을 가리킨다
printf("sp : %08X, *sp : %X\n", sp, *sp);
sp = sp++;
ip = ip++; //sp가 iNum의 세 번째 바이트를 가리킨다
printf("sp : %08X, *sp : %X\n", sp, *sp);
printf("ip : %08X, *ip : %X\n", ip, *ip); //ip 증가값 보기
return 0;
}
결과
iNum : F5A0B43 ip : 0012FF7C
sp : 0012FF7C, *sp : B43
sp : 0012FF7E, *sp : F5A
ip : 0012FF80, *ip : 12FFC0
sp = sp + 1 -> type * 1
//float형의 포인터가 int형의 변수에 접근하는 프로그램
#include <stdio.h>
int main()
{
int i;
float *fp;
fp = (float *)&i; //float형의 포인터 변수가 int형의 변수를 가리킨다. fp는 *float, &i는 *int
i = 357;
*fp = *fp + 1;
printf("%d\n", *fp);
printf("%d\n", i);
return 0;
}
결과
0
//포인터 변수가 초기화되지 않고 사용된 프로그램
#include <stdio.h>
int main()
{
int i = 3, *ip;
printf("%p\n", ip); //ip가 초기화되지 않은 상태에서 값을 출력
*ip = 21;
printf("%d\n", *ip);
return 0;
}
결과
CCCCCCCC
리눅스에서 결과
0x40009ca0
세그멘테이션오류
이 프로그램에서 포인터 변수 ip는 초기화되지 않아 가리키는 메모리가 없는 상태에서 대장 메모리에 대한 값을 부여받았다. 따라서 컴파일 단계에서 경고 메세지가 출력되고, 실행도 정상적으로 되지 않는 것이다.