나는 일식이 코드를 넣어값
main()
{
int *p, *q, *r;
int a = 10, b = 25;
int c[4] = {6,12,18,24};
p = c;
printf("p = %d\n" ,p);
}
내가 얻을 출력을 실행 할당되지 않은 C에서 변수를 인쇄하는 것입니다 P = 대표하는 가정이 숫자가 무엇인지 2,358,752
? 그것은 변수의 주소입니까?
위의 내용이 사실이라면 다음 질문에 대한 내 대답이 맞습니까?
그래서 너무 라인
p = c;
는 5014 것 것 다음 위치
address variables
5000 p
5004 q
5008 r
500C a
5010 b
5014 c[0]
5018 c[1]
501C c[2]
5020 c[3]
에 저장되어 다음과 같은 말을 할 수 있습니다?
질문에 대한 답변 : 예, 예. –
'% d'을 (를) 사용하여 포인터를 인쇄하는 것은 정의되지 않은 동작입니다. 포인터 값을 포함하는 메모리가 int를 포함하고있는 것처럼 해석됩니다. 시스템이 플랫 메모리 모델과 비 트래핑 int 및 기타 일반적인 가정을 사용하고 sizeof (int *) == sizeof (int)를 사용하면 주소가 제대로 표시됩니다. 하지만 당신은'* p'를 사용하고 신뢰할 수있는'void * '로 캐스트합니다. –
@MattMcNabb : '% p'을 (를) 사용하고'void * ''(으)로 캐스팅하셨습니까? 나는 그 분석에 동의 할 것이다. 그리고 대부분의 64 비트 시스템에서는 sizeof (int)! = sizeof (int *)이므로 주소를 출력하기 위해'% d '를 사용하는 것은 본질적으로 이식성에 대한 책임입니다. –