주소만 전문적으로 저장하는 타입 = 포인터타입
32bit(bus가) cpu체제에서는 4바이트 주소값을 가지기 때문에 포인터를 선언할때
4바이트로 선언하여 사용하는것이 좋다!
포인터를 선언할때 *(type)을 변수이름 앞에 붙여준다!(★자료형)
int, double등 같이 선언해야한다!(예 int *ip; // (int)정수를 가리키는 ★포인터 변수)
★포인터변수를 선언할때 선언만 해놓고 이후에 유효한 주소값을 채워넣을 경우
*ip=0; || *ip=NULL; // NULL은 사실상 0을 의미함
위의 초기화하는 값 0을 가리켜 '널 포인터'라 한다. 이는 0번지를 의미하는것이 아니라
"아무데도 가리키지 않는다!!"
주소값만을 사용하여 변수를 수정가능
*((int *)0x12FF3C)=38; // 포인터 변수를 쓰지않고 주소값만을 사용하여 변수 수정방법
자료형 변수이름 주소값
int iNum 0012FF3C
int* ip 0012FF38
c에서 *의미 2항 연산자(곱하기), 단항 연산자(포인터)
iNum앞에 *을 붙이면 2항 연산자로 인식해서 컴파일시 에러가 뜬다!
ip=100; // ip에 100을 넣는다!
*ip=100; // ip에 저장된 포인터주소값을 따라가서 대응하는 곳에 100을 넣는다!
예제
#include <stdio.h>
int main()
{
int iNum=100;
int *ip;
printf("iNum Value(값) : %d\n", iNum);
printf("iNum Address(주소값) : %08X\n", &iNum);
printf("ip Address(주소값) : %08X\n", &ip);
// printf("ip Value(값) : %08X\n", ip);
ip=&iNum;
printf("ip Value(값) : %08X\n", ip);
// printf("ip Address(주소값) : %08X\n", &ip);
printf("ip Address(주소값) : %d\n", *ip);
return 0;
}
ip는 iNum을 가리킨다!
예제
#include <stdio.h>
int main()
{
int A=99;
int *p=&A;
*p=100;
printf("%08X\n", &A);
*((int *)0x12FF3C)=38; // *(int *)은 주소를 인지시킨다!
// type casting operator(형변환 연산자)
printf("%d\n", A);
return 0;
}
댓글 없음:
댓글 쓰기