次のようにアドレスを返す関数があります
_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;
}
_
ここで、structnodeは
_struct node {
int data;
struct node *next;
};
_
Tempに保存されているアドレスをprintf( "")で確認するにはどうすればよいですか?
[〜#〜]更新[〜#〜]
gdbでアドレス指定されていることを確認すると、アドレスは16進数形式、つまり0x602010で送信されます。ここで、printf("%p",temp)
の同じアドレスは、gdbprintで表示されたものとは異なる番号で送信されます。コマンド。
ポインタアドレス形式指定子を使用します%p
:
printf("Address: %p\n", (void *)temp);
編集:これを行わないでください!必要なものではなく、ポインタのアドレスを出力します!
これを機能させるのにあらゆる種類の問題がありましたが、コンパイラ(単純な「cc」unixコマンドラインを使用)が文句を言わず、適切な結果が得られたようです。
struct node temp;
// ... whatever ...
printf ("the address is %p", &temp);
[削除するのではなく、これをしてはいけないことの例として残しました。 -smb]
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
}
出力を取得できるようになりました:g.aのアドレス
このように構造体変数のアドレスを出力できます。また、各メンバーのアドレスを出力することで、構造体でパディングがどのように発生するかを確認できます。
すべての間違いと提案に感謝しますpingコメントしてください。