포인터가 기본 데이터 유형으로 형변환되면 어떻게됩니까? 왜 우리는 가치를 얻습니까?
예를 들면 :
int h=4;
int * ph=&h;
printf("%p",ph);
printf("%d",ph);
두 print 문은 서로 다른 값을 인쇄합니다.
printf("%p",ph);
런타임에 "저기 봐, 그 메모리는 포인터입니다.로드하고 16 진수로 인쇄하십시오." 이것은 컴파일러에게 말하지 않고, 컴파일러는 printf가 무엇을하고 있는지 알지 못합니다 (실제로 대부분의 현대 컴파일러는 printf 문을 살짝 들여다 보며, 아마도 경고를 받았을 것입니다).
printf("%d",ph);
"그 메모리 조각을보고 정수입니다.로드하여 사람이 읽을 수있는 10 진수로 인쇄하십시오"
ph 가 int에 대한 포인터라는 점을 감안할 때 첫 번째는 올바른 작업을 수행하고 포인터의 값을 인쇄합니다.
두 번째 동작은 시스템의 int 및 포인터의 크기와 표현에 따라 다릅니다. 값은 '정말'포인터이지만 런타임에 int를 알려줍니다. 많은 시스템에서 포인터와 정수는 32 비트입니다. 이 경우로드는 32 비트를로드하고 인쇄는 해당 비트를 정수로 해석하고 포인터의 기본 10 값을 인쇄합니다. 다른 시스템에서 포인터는 64 비트이고 int는 여전히 32 비트입니다. 당신이 어떤 값을 말하지 않기 때문에 무슨 일이 일어나고 있는지 알기가 어렵지만 내가 추측해야한다면 당신이 같은 값을 얻고 있다고 말할 것입니다.
두 번째는 '정의되지 않은 동작'이라는 것입니다. 시스템에 거짓말을하고 있습니다. 나쁘고 혼란스럽고 설명 할 수없는 일이 발생할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다