2011-06-20 34 views
14

printf bir yapının adresini görmek nasıl

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 { 
     int data; 
     struct node *next; 
}; 

adresinde aşağıdaki gibi bir işlev döndürüyorum: printf ("") temp dosyasında saklanan adresi nasıl görebilirim?


gdb'de adresli olarak kontrol edilirse adresler xdx29 biçiminde yani printf("%p",temp) adresinde printf("%p",temp) adresinde gdb yazdırma komutunda gördüğümden farklı bir numaraya geliyor. .

cevap

24

işaret adres biçim belirticisi %p kullanın:

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

+1: (pedanticly doğru) çok istekli Derleyiciler için, void * '' işaretçiyi döküm: 'printf ("% p", (void *) temp) ' – pmg

+0

Neden printf (" 0x% 08X ", &temp);"? – aroth

+2

@aroth gibi bir şeyin adresini yazdırmıyorsunuz: "imzasız" ve "struct node **" ile aynı temsile sahip olmadığınız için hiçbir garantiniz yok: snippet'iniz 64 bitlik makinelerde korkunç bir şekilde başarısız olur. Örneğin – pmg

İlgili konular