Home > Software design >  Print variable address inside structure pointer
Print variable address inside structure pointer

Time:03-29

Suppose I have a pointer-to-structure Y, and that structure contains a structure variable (not a pointer) X.

What will be the correct way to print the address of X, so that I can use the address to fetch more info on X?

printf("address is %x", Y->X)

Or

printf("address is %x", &(Y->X))

CodePudding user response:

Y is a pointer to a structure.

Y->X is the member X of the structure. If X is itself a structure, Y->X is still the member X, so it is a structure. It is not a pointer or address.

The address of Y->X is &Y->X. If you want to print or use the address of Y->X, use &Y->X.

To print a pointer, convert it to void * and format it with %p:

printf("The address of Y->X is %p.\n", (void *) &Y->X);

The %p conversion specifier uses an implementation-defined format for addresses. If you want more control over formatting of an address, you can include <inttypes.h> and <stdint.h>, convert the pointer to uintptr_t, and use formatting macros from <inttypes.h>. For example, to format it as a hexadecimal numeral with at least 16 digits (using leading zeros as necessary), use:

printf("The address of Y->X is 6" PRIxPTR ".\n", (uintptr_t) &x);

CodePudding user response:

This sample should give you answer and understand some stuff.

#include <stdio.h>
struct Y {
  int x;
};
int main() {
 struct Y yobj;
 struct Y *ptr;

 yobj.x=101;
 ptr = &yobj;

 int *ptr2 = &(ptr->x);

 printf ("\n the address of x :%p", &(ptr->x));
 printf ("\n the value of x :%d", *ptr2);
 return 0;
}

CodePudding user response:

the second form is the correct one. The first evaluates to the structure itself. Some modern compiler should yield an error because format %x expects an adress not a structure.

  •  Tags:  
  • c c
  • Related