• ベストアンサー

Sizeofが分かりません

sizeofのデータサイズがどういう風に計算されているのかよく分かりません。 例えば以下のコードですが、 union Name { char firstName[10]; char lastName[10]; }; int main() { union Name name; strcpy(name.firstName, "Dennis"); strcpy(name.lastName, "Ritchie"); printf("%d", sizeof(name)); } outputは11となります。これはなぜでしょうか? 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

これはunionが分からないのではないでしょうか? unionは同じ場所を名前や型を代えて宣言する方法ですよね? name.firstName.[0]もname.lastName.[0]も全く同じ場所のデータですよ。 一番大きなサイズが取られますが先頭は同じ場所です。 例えば union Person { char cFirstName[10]; char cLastName[10]; char cAddress[255]; } で終端コードまで計算するコンパイラならsizeof(Person)は256です。 通常は255です。 cFirstName[0]を'A'に変えたら、cLastName[0]もcAddress[0]も'A'に変わります。 Unionですから。 structを使えば、期待するサイズが得られるのではないでしょうか?

codingbeginner
質問者

お礼

sizeofが分からないと思っていましたが、unionが分かっていないのではと気付いて解説して下さったTreatMeGentlyさんをベストアンサーにしたいと思います。ありがとうございました!

その他の回答 (4)

  • tsunji
  • ベストアンサー率20% (196/958)
回答No.4

unionで宣言すると共用体になるので10ですね。 structの構造体宣言なら20になります。 プログラムからするとstructの間違いでは? http://www.comb.kokushikan.ac.jp/~ken/blogn/sb/c/archives/2005/02/post_8.html

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

「よくわかりません」ということだけど, どこまでわかってどこで困っているのですか? そもそも sizeof が何をするものかは理解できていますか?

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.2

sizeof演算子は、データ型や構造体で確保した記憶領域の大きさを、 整定数のバイト数で表すものです。通常、この記憶領域の大きさの計算はコンパイル時に行われます。 ~はじめての”C”より~ コンパイル時に行われるということは、実行時に何を代入しようが、 どのようにメモリーを壊そうが関係ないということです。 コンパイル時ということですから、コンパイル後のコードを見ると、 printf("%d", sizeof(name));  ではなく、 printf("%d", 10);       となっています。

codingbeginner
質問者

お礼

そうですね。10になりますよね。11は正解を見間違いしていました。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

コードを載せるときは、回答しようとする側で そのままコンパイルできるよう、極力省略しないでいただければ、 と思います。 さて、私のところで下記のコードを実行したところ、 10 という結果を得ました。 #include <stdio.h> #include <string.h> union Name { char firstName[10]; char lastName[10]; }; int main(void) { union Name name; strcpy(name.firstName, "Dennis"); strcpy(name.lastName, "Ritchie"); printf("%s\n", name.firstName); printf("%s\n", name.lastName); printf("%d\n", sizeof(name)); return 0; }

codingbeginner
質問者

お礼

余分なものは省略した方がシンプルで見やすいかなと思いました。以後気を付けます。

関連するQ&A

専門家に質問してみよう