| wolverine |
int a = 10;
compiler/linker에 의해서 변수 a의 memory address가 결정되고, 그곳에 10이라는 값이 저장됩니다.
(char*)a
a라는 변수에 있는 10이라는 값이 char pointer 형태로 형변환(casting)이 됩니다.
(char*)&a
a의 memory address가 char pointer 형태로 형변환(casting)이 됩니다.
예를 들어서 다음과 같이 memory가 잡혀 있다고 가정을 했을경우,
address value
0x1000 10 <---- 변수 a가 할당(alloate) 된 곳
0x1001 11
0x1002 12
0x1003 0
0x000a xx
0x000b xx
0x000c xx
(char*)a 는 10이라는 값을 반한합니다.
따라서 이것을 string으로 이용하게 되면,
0x000a(10) 번지에 저장되어 있는 값들이 string으로 이용됩니다.
만약 현재 memory가 위의 경우와 같을때에 printf("%s", (char*)a) 라고 하게되면,
printf 함수는 0x000a번지에 있는 값을 string으로 인식하여서
xx를 출력하게되며, 이때에, xx값이 '0'이 될 때까지 string을 출력합니다.
(char*)&a는 0x1000 이라는 값을 반환합니다.
따라서 이것을 string으로 이용하게 되면,
0x1000 번지에 저장되어 있는 값들이 string으로 이용됩니다.
만약 현재 memory가 위의 경우와 같을때에 printf("%s", (char*)&a) 라고 하게되면,
printf 함수는 0x1000번지에 있는 값을 string으로 인식하여서
ASCII 10,11,12를 차례대로 출력하게되며,
0이 나오게되는 시점에서 출력을 종료하게 됩니다. |
2012/07/04 |
|