Print the address or pointer for value in C

239,335

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
Share:
239,335

Related videos on Youtube

Frank V
Author by

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, 2022

Comments

  • Frank V
    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
    Jim Buck almost 15 years
    They 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
    Hasturkun almost 15 years
    @Jim: The "C" tag suggests otherwise
  • Frank V
    Frank V almost 15 years
    @Jim: Hasturkun is right. I'm working in C. I should have posted that.
  • RastaJedi
    RastaJedi about 8 years
    I would imagine they are promoted? Not sure, can someone clarify?
  • RastaJedi
    RastaJedi about 8 years
    After some research, no, they are not promoted automatically. A cast to void * is indeed required.