C言語における構造体のアドレスについて教えていただきたいです。
下記コードのように構造体を作り、実体を作りました。
そのとき実体のアドレスを調べたところ、
どちら同じアドレスが表示されました。
なぜ同じアドレスが表示されるのでしょうか。
C言語の仕様上、この場合はsも&sも同じことを表すように
変換されているのですか?
調べてみましたが、よくわからなかったため、
質問をさせていただきました。
typdef struct{ int a; int b; int c; }SAMPLE; int main(){ SAMPLE s[3]; printf("%p\n",s); printf("%p\n",&s); //どちらも同じアドレスが表示される }
それぞれ何のアドレスになることを期待してましたか?
sのアドレスについては&s[0]と同じアドレスになることを期待していました。
実際、同じアドレスが表示されます。
&sに関してはsのアドレスを保存している領域の先頭アドレスが表示されると考えていました。
例えばですが、コードに
SAMPLE *p;
p = s;
printf("%p\n",p);
printf("%p\n",&p);
と加えると、この場合は別のアドレスが表示されます。
それと同様なことが起こるのだろうと期待していました。
質問内容は、構造体とは何の関係も無く、配列の名前が何を意味するのかの話になってますが、質問意図は合っていますか?
つまり、int s[3]; と書いても全く同じ内容の質問です。
回答2件
あなたの回答
tips
プレビュー