20140318 - 포인터
메모리에서는
일반적으로는 1byte씩 놔두고 주소를 숫자로 메김.
특수적으로는 2~3byte씩 주소를 숫자로 메길 수도 있음.
포인터(&, *) - 메모리에 직접 접근이 가능.
<!--[if !supportEmptyParas]--> *는 주소를 캐스팅할 때나 값을 단항으로 쓸 때
&는 주소를 알아내는 연산자.
symbol table
Type(자료형) |
Name(변수명) |
Address(주소) |
int |
iNum |
1000->12FF70(16진수) |
int |
iCnt |
2000->12FF74(16진수) |
<!--[if !supportEmptyParas]--> <!--[endif]-->
&변수명(주소나옴.)
<!--[if !supportEmptyParas]--> <!--[endif]-->
%08X - 16진수로 출력하고 빈자리는 0으로 채우고 8자리
<!--[if !supportEmptyParas]--> <!--[endif]-->
*((int *)0x12FF70) = 100; - 0x12FF70이라는 주소를 (int *)로 주소상수로 캐스팅 시키고,
그 주소로 이동하여, 100을 넣는다.(iNum = 100)
(예시1)
(예시2)
symbol table
Type(자료형) |
Name(변수명) |
Address(주소) |
int |
iNum |
12FF70(16진수) |
int iNum = 100;
(int *(int형 주소상수다.))0x12FF70 = 100; //warning 뜸, 주소상수(int *) = 정수상수
//둘 다 상수라서,
float fNum = 2.2; //마찬가지로 warning 뜸, 주소상수 = 정수상수
(float *(float형 주소상수다.))0x12FF78 = 2.2 //둘 다 상수라서.
&iNum과 (int *)0x12FF74 - 같은 뜻이다. //같은 위치를 나타내는 것.
(예시3)
symbol table
Type(자료형) |
Name(변수명) |
Address(주소) |
int |
iNum |
12FF70(16진수) |
int * |
iP |
12FF74(16진수) |
int * - 주소값을 가진다.
int iNum = 0;
int * iP = &iNum; 이면
iP는 iNum의 주소값을 가지게 된다.(iP가 iNum을 가리킨다)
20140317문제 풀이
3-15는 문제 의미를 파악 못하겠네요..ㅠ
다른건 나름 풀었슴다..케어 부탁드릴께요ㅠ