Print the address or pointer for value in C
Solution 1
What you have is correct. Of course, you'll see that emp1 and item1 have the same pointer value.
Solution 2
To print address in pointer to pointer:
printf("%p",emp1)
to dereference once and print the second address:
printf("%p",*emp1)
You can always verify with debugger, if you are on linux use ddd
and display memory, or just plain gdb
, you will see the memory address so you can compare with the values in your pointers.
Solution 3
I believe this would be most correct.
printf("%p", (void *)emp1);
printf("%p", (void *)*emp1);
printf()
is a variadic function and must be passed arguments of the right types. The standard says %p
takes void *
.
Solution 4
Since you already seem to have solved the basic pointer address display, here's how you would check the address of a double pointer:
char **a;
char *b;
char c = 'H';
b = &c;
a = &b;
You would be able to access the address of the double pointer a
by doing:
printf("a points at this memory location: %p", a);
printf("which points at this other memory location: %p", *a);
Solution 5
char c = 'A';
printf("ptr: %p,\tvalue: %c,\tand also address: %zu", &c, c, &c);
Result:
ptr: 0x7ffc48e5105f, value: A, and also address: 140721531457631
Related videos on Youtube
![Frank V](https://i.stack.imgur.com/nTnqA.jpg?s=256&g=1)
Frank V
Software Engineer, professionally - I work face-to-face with clients on a variety of software technologies (React, Node, .NET, PHP, MySQL, JavaScript, Python, etc). In addition, I have a particular affinity for open-source software. I study it to learn and make contributions when possible. I document my adventures at http://theOpenSourceU.org/ #SOreadytohelp
Updated on July 05, 2022Comments
-
Frank V almost 2 years
I want to do something that seems fairly simple. I get results but the problem is, I have no way to know if the results are correct.
I'm working in C and I have two pointers; I want to print the contents of the pointer. I don't want to dereference the pointer to get the value pointed at, I just want the address that the pointer has stored.
I wrote the following code and what I need to know is if it is right and if not, how can I correct it.
/* 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 );
While I'm posting this (and the reason it is important that it is correct) is that I eventually need to do this for a pointer-to-a-pointer. That is:
const Emp** emp1 = (const Emp**) item1;
-
Jim Buck almost 15 yearsThey won't be the same if item1's type is part of a multiple inheritance and/or is an ancestor of Emp, depending on how the compiler lays out each of the classes that compose item1's type.
-
Hasturkun almost 15 years@Jim: The "C" tag suggests otherwise
-
Frank V almost 15 years@Jim: Hasturkun is right. I'm working in C. I should have posted that.
-
RastaJedi about 8 yearsI would imagine they are promoted? Not sure, can someone clarify?
-
RastaJedi about 8 yearsAfter some research, no, they are not promoted automatically. A cast to
void *
is indeed required.