Print het adres of de aanwijzer voor de waarde in C

Ik wil iets dat vrij eenvoudig lijkt te doen. Ik krijg resultaten, maar het probleem is, ik heb geen manier om te weten of de resultaten correct zijn.

Ik werk in C en ik heb twee pointers; Ik wil de inhoud van de aanwijzer te drukken. Ik wil niet de pointerdereferentie om de waarde wees op te krijgen, ik wil gewoon het adres dat de wijzer is opgeslagen.

Ik schreef de volgende code en wat ik moet weten is als het goed is en zo niet, hoe kan ik corrigeren.

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

Terwijl ik dit het plaatsen (en de reden is het belangrijk dat het juist is) is dat ik uiteindelijk moet dit doen voor een pointer-to-a-pointer. Dat is:

const Emp** emp1 = (const Emp**) item1; 

Antwoord 1, Autoriteit 100%

Om het adres in pointer afdrukken naar pointer:

printf("%p",emp1)

om dereference eens en het tweede adres af te drukken:

printf("%p",*emp1)

U kunt altijd controleren met debugger, als je op Linux ddden display-geheugen, of gewoon gdb, vindt u het geheugen adres te zien, zodat u kunt vergelijken met de waarden in uw pointers.


Antwoord 2, Autoriteit 72%

Wat je hebt is correct. Natuurlijk, zult u zien dat EMP1 en item1 hebben dezelfde pointer waarde.


Antwoord 3, Autoriteit 40%

Ik denk dat dit zou zeer correct zijn.

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

printf()is een variadic functie en moeten worden doorgegeven argumenten van de juiste soorten. De standaard zegt %pneemt void *.


Antwoord 4, gezag 25%

Sinds lijken je al de basis pointer adres scherm te hebben opgelost, hier is hoe je het adres van een dubbele pointer zou controleren:

char **a;
char *b;
char c = 'H';
b = &c;
a = &b;

Je zou in staat zijn om toegang te krijgen tot het adres van de dubbele pointer adoor te doen zijn:

printf("a points at this memory location: %p", a);
printf("which points at this other memory location: %p", *a);

Antwoord 5, gezag 12%

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

Resultaat:

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

Antwoord 6

Ik heb in deze positie geweest, vooral met nieuwe hardware. Ik stel voor dat je een beetje hex dump routine van je eigen schrijven. Je zult in staat zijn om de gegevens en de adressen ze op, alles bij elkaar getoond zien. Het is een goede gewoonte en een bouwer vertrouwen.

Other episodes