• 締切済み

すいません

現在実行できる環境がないのでお聞きします。 初心者的かもしれませんが、お手数ですが、教えて下さい。 (1)aaaの中に格納されるのはアドレスでしょうか?中身でしょうか? int aaa aaa = *(unsigned int*)&kouzou()->addr (2)aaaの中に格納されるのはアドレスでしょうか?中身でしょうか? int bbb bbb = *(unsigned int*)&kouzou()->hai struct CCC { int addr char hai[10] }kouzou;

みんなの回答

  • jjk65536
  • ベストアンサー率59% (66/111)
回答No.1

実行環境がないとのことなので、実行させてみました。 ただし、以下の修正を行いました。 修正が意図と違う場合は指摘してください。 ・kouzou()という関数はないため、()を削除 ・kouzouにアロー演算子(->)を使用しているが、kouzouは実体として定義されているため、ポインタとなるようにした #include <stdio.h> #include <stdlib.h> struct CCC { int addr; char hai[10]; }; int main(void) { struct CCC *kouzou; kouzou = calloc(1, sizeof(struct CCC)); int aaa; aaa = *(unsigned int*)&kouzou->addr; int bbb; bbb = *(unsigned int*)&kouzou->hai; printf("aaa = %x\n", aaa); printf("bbb = %x\n", bbb); } このプログラムを実行すると、 aaa = 0 bbb = 0 という出力が得られます。 つまり、「アドレスでしょうか?中身でしょうか?」というご質問に 対しては、中身ですということになります。 また、kouzou->haiに適当な文字列が入っていた場合、 先頭の4byte(注)をunsigned intと解釈した値がbbbに代入されます。 これは、(unsigned int*)とキャストしているためです。 注:厳密にはsizeof(unsigned int)分です

duvetica
質問者

お礼

ありがとうございました。 こちらも2時間かけて環境を作成し、実行してみました。 自分がしないコーディングをみると戸惑い、論理的にはデータ(中身)だと思っていましたが、実行してみないと確証が得られないので・・・ お手数おかけしましたm(_ _)m

関連するQ&A