나는 상당히 단순 해 보이는 것을하고 싶다. 나는 결과를 얻었지만 문제는 결과가 올바른지 알 방법이 없다는 것입니다.
저는 C로 작업하고 있으며 두 개의 포인터가 있습니다. 포인터의 내용을 인쇄하고 싶습니다. 포인터가 가리키는 값을 얻기 위해 포인터를 역 참조하고 싶지 않고 포인터가 저장 한 주소 만 원합니다.
나는 다음 코드를 작성했고 내가 알아야 할 것은 그것이 옳은지, 그렇지 않다면 어떻게 수정할 수 있는가이다.
/* item one is a parameter and it comes in as: const void* item1 */
const Emp* emp1 = (const Emp*) item1;
printf("\n comp1-> emp1 = %p; item1 = %p \n", emp1, item1 );
내가 이것을 게시하는 동안 (그리고 그것이 정확하다는 것이 중요한 이유) 결국 포인터에 대한 포인터를 위해 이것을해야하기 때문입니다. 그건:
const Emp** emp1 = (const Emp**) item1;
답변
당신이 가진 것이 맞습니다. 물론 emp1과 item1의 포인터 값이 동일하다는 것을 알 수 있습니다.
답변
포인터에 대한 포인터의 주소를 인쇄하려면 :
printf("%p",emp1)
한 번 역 참조하고 두 번째 주소를 인쇄하려면 :
printf("%p",*emp1)
디버거를 사용하여 항상 확인할 수 있습니다. 리눅스를 사용 ddd
하고 메모리를 표시하거나 그냥 일반인 gdb
경우 메모리 주소를 볼 수 있으므로 포인터의 값과 비교할 수 있습니다.
답변
나는 이것이 가장 정확할 것이라고 믿습니다.
printf("%p", (void *)emp1);
printf("%p", (void *)*emp1);
printf()
가변 함수이며 올바른 유형의 인수를 전달해야합니다. 이 표준은 말한다 %p
합니다 void *
.
답변
기본 포인터 주소 표시를 이미 해결 한 것 같으므로 이중 포인터의 주소를 확인하는 방법은 다음과 같습니다.
char **a;
char *b;
char c = 'H';
b = &c;
a = &b;
다음 a
을 수행 하여 이중 포인터의 주소에 액세스 할 수 있습니다 .
printf("a points at this memory location: %p", a);
printf("which points at this other memory location: %p", *a);
답변
char c = 'A';
printf("ptr: %p,\t value: %c,\t and also address: %zu",&c, c,&c);
결과:
ptr : 0xbfb4027f, 값 : A 및 주소 : 3216245375
답변
나는 특히 새로운 하드웨어와 함께이 위치에 있었다. 나는 당신 자신의 작은 16 진 덤프 루틴을 작성하는 것이 좋습니다. 데이터와 그들이있는 주소를 모두 함께 볼 수 있습니다. 그것은 좋은 습관이며 자신감을 키워줍니다.