source

C의 값 주소 또는 포인터를 인쇄합니다.

gigabyte 2022. 7. 23. 13:58
반응형

C의 값 주소 또는 포인터를 인쇄합니다.

나는 꽤 간단해 보이는 것을 하고 싶다.결과는 나오는데 문제는 결과가 맞는지 알 방법이 없다는 거예요.

저는 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; 

포인터에 대한 포인터의 주소를 인쇄하려면:

printf("%p",emp1)

참조를 한 번 해제하고 두 번째 주소를 인쇄하려면:

printf("%p",*emp1)

Linux를 사용하는 경우 언제든지 디버거를 사용하여 확인할 수 있습니다.ddd디스플레이 메모리 또는 일반 메모리gdb메모리 주소가 표시되어 포인터의 값과 비교할 수 있습니다.

당신이 가지고 있는 것은 맞습니다.물론 emp1과 item1의 포인터 값이 같다는 것을 알 수 있습니다.

이게 가장 맞을 것 같아요.

printf("%p", (void *)emp1);
printf("%p", (void *)*emp1);

printf()는 가변 함수이며 올바른 유형의 인수를 전달해야 합니다.규격에 의하면%p걸린다void *.

char c = 'A';
printf("ptr: %p,\tvalue: %c,\tand also address: %zu", &c, c, &c);

결과:

ptr: 0x7ffc48e5105f,    value: A,    and also address: 140721531457631

기본 포인터 주소 표시를 이미 해결한 것 같으므로 이중 포인터의 주소를 확인하는 방법은 다음과 같습니다.

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);

저는 특히 새로운 하드웨어에서 이 위치에 있었습니다.당신만의 작은 쓰레기 처리 방법을 쓰라고 제안합니다.데이터와 데이터가 있는 주소를 모두 확인할 수 있습니다.그것은 좋은 관행이자 자신감 구축자입니다.

언급URL : https://stackoverflow.com/questions/1055959/print-the-address-or-pointer-for-value-in-c

반응형