質問: "hoge"; printf("%d\n",sizeof(hoge)); printf("%d\n",sizeof(data.name)); ``` ### 試したこと * ポインタのサイズが4byteになっている。 * 下記のプログラムの出力結果が 16 4 となっていました。 * 構造体の説明では、よく配列で範囲を決めた使い方が紹介されていますが ポインタを使うと4byte固定になるなら、こちらの方が簡単だからですか? まああらかじめ文字の入力がわかっているなら配列の方がいいのかなと も思いますが。 もしかして根本的に間違っているかもしれません。 ### 補足情報(言語/FW/ツール等のバージョンなど) bcc5.5 c++版
回答: それぞれの長さを出力しました。 ``` #include #include struct hoge{ int a; int b; int c; char *name; }; int main(void){ struct hoge data; data.a = 1; data.b = 1; data.c = 1; data.name = "hoge1"; printf("構造体: %d\n",sizeof(struct hoge)); printf("int a: %d\n",sizeof(data.a)); printf("int b: %d\n",sizeof(data.b)); printf("int c: %d\n",sizeof(data.c)); printf("ポンタ長: %d\n",sizeof(data.name)); printf("文字列長: %d\n",strlen(data.name)); return 0; } #結果 構造体: 24 int a: 4 int b: 4 int c: 4 ポンタ長: 8 文字列長: 5 ``` ポインタは64環境なので8バイトになっています。 文字は分かり易く5文字しています。 構造体は明細の合計と合いませんが、これはメモリ上に変数が取られるときは、 アドレスが、ある決められた区切りに合わせられます。これを「バイト境界」と呼びます。 構造体はこれにより、適当にメンバ間に空間が入れられます。構造体の「アライメント」と言います。