프로그래밍

 3198, 1/160 회원가입  로그인  
   soul214
   (char*)&integer....

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=3446 [복사]


int a = 10;
으로 선언했을 때에..

(char*)a 는 정수 a의 값을 char문자열로 변환한거잖아요??

그런데, (char*)&a 는 무슨 의미가 되는건가요??...

a의 주소를 문자열로 변환하는건가요??..

저는...&((char*)a)가 맞다고 생각했었거든요??....a를 문자열로 바꾼 후,  그걸 주소로 변환시키는게;;;

(char*)&a는...a의 주소를 문자열로 변환하는건데...주소가 정수형이 아니라 문자열로 되어버리는건가요??;;;

  Hit : 6196     Date : 2012/06/26 02:44



    
chasper0101 더블포인터의 개념으로 생각하시면 되요.. 2012/06/27  
soul214 조금더 자세히 설명은 안될까요??.. 2012/06/28  
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