Как увидеть адрес структуры в printf

У меня есть функция, которая возвращает адрес следующим образом

struct node *create_node(int data)
{
        struct node *temp;
        temp = (struct node *)malloc(sizeof(struct node));
        temp->data=data;
        temp->next=NULL;
        printf("create node temp->data=%d\n",temp->data);
        return temp;
}

где struct node -

struct node {
        int data;
        struct node *next;
};

Как я могу видеть в printf ("") адрес, хранящийся в temp?

UPDATE
Если я проверю адрес в gdb, адреса поступают в шестнадцатеричном формате, т.е. 0x602010, где один и тот же адрес в printf("%p",temp) приходит в другом количестве, которое отличается от того, что я видел в команде печати gdb.

Ответы

Ответ 1

Использовать спецификатор формата адреса указателя %p:

printf("Address: %p\n", (void *)temp);

Ответ 2

EDIT: Не делай этого! Он печатает адрес указателя, а не то, что вы хотите!

У меня были всевозможные проблемы, чтобы заставить это работать, но здесь кое-что, на что компилятор (я использую простую командную строку "cc" unix) не жаловалось и, казалось, давало надлежащие результаты:

struct node temp;
// ... whatever ...
printf ("the address is %p", &temp);

[Вместо того, чтобы удалять, я оставил это как пример того, что НЕ нужно делать. -smb]

Ответ 3

enter code here

#include<stdio.h>
struct anywhere
{ 
double a;
int b;
char c;
float d;
}g;
int main()
{
printf("%p\n%p\n%p\n%p\n",&g.a,&g.b,&g.c,&g.d);
return 0
}        

теперь мы можем получить вывод: адрес г.а.а наоборот

мы можем напечатать адрес структурной переменной следующим образом а также о том, как происходит заполнение в структурах, мы можем увидеть, напечатав адрес каждого члена.

Спасибо вам всем любые ошибки и предложения, пожалуйста, пинг комментарий.