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
'source' 카테고리의 다른 글
랜덤 "Element are not attached to the DOM" StaleElementReferenceException (0) | 2022.07.23 |
---|---|
char 배열을 문자열로 다시 변환하는 방법 (0) | 2022.07.23 |
GCC에서 x86 어셈블리의 Intel 구문을 사용할 수 있습니까? (0) | 2022.07.23 |
Java에서 메모리 누수를 작성하려면 어떻게 해야 하나요? (0) | 2022.07.23 |
포획은 루프 안쪽으로 할까요, 아니면 바깥쪽으로 할까요? (0) | 2022.07.23 |