トーク:C言語/配列
< トーク:C言語
最新のコメント:6 年前 | トピック:"配列の文法についての制限" 節が間違っている | 投稿者:すじにくシチュー
"配列の文法についての制限" 節が間違っている
編集もし宣言時に、部分的に、ある要素の型を他の型と違うように思っても、そもそも、そのような構文じたいが用意されておらず、よって、部分的に型を違うものにする行為は不可能である。
なので、たとえば、配列では、けっして、例えば「山田の成績、国語は80点、数学は70点」の意味で「"山田"(文字型), 80(数値型), 70(数値型)」のような成績表などは、つくることはできない。
上記のように記述されていましたが、そんなことはありません。
共用体(union)を用いることで、配列の要素毎に異なる型を使うことができます。以下はその例です。
#include <stdio.h>
/* mix_t 型は char 型の配列、もしくは int 型 */
union mix_t {
char string[100];
int number;
};
int main(void)
{
union mix_t student[3] = {
{.string = "山田"},
{.number = 80},
{.number = 70}
};
printf("名前: %s, 国語: %d点, 数学: %d点\n",
student[0].string, /* student[0] は char 型の配列として扱う */
student[1].number, /* student[1] は int 型として扱う */
student[2].number); /* student[2] は int 型として扱う */
// => 名前: 山田, 国語: 80点, 数学: 70点
return 0;
}
構造体の重要性について語りたいのかもしれませんが、それは構造体の項目で語ればいいのであって、この項目で語ることではないと思います。--Siglite3 (トーク) 2018年7月1日 (日) 11:51 (UTC)
- 少し悩みましたが、以下の理由から編集そのものを取り消しました[1]。
- 前提が間違っている(節全体を書き直す必要がある)ため、記述を再利用できそうにないこと
- 配列の次元について、記述が重複しており、冗長であること
- 最初に配列の次元や2次元配列の話をされてもピンとこないと思いますし、2次元配列については後半に記述するほうがよいでしょう。 --Siglite3 (トーク) 2018年7月1日 (日) 13:18 (UTC)
- (すじにくシチューのコメント) 了解しました。「共用体」の存在をすっかり忘れてました。もし配列の項目で構造体のハナシをしたら、配列も知らない初心者に「共用体」までも話さざるを得ず、教育的に非効率ですね。おっしゃるとおり、構造体の項目に構造体配列の説明を回しましょう。--すじにくシチュー (トーク) 2018年7月2日 (月) 01:36 (UTC)