掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.23641

int i[5]={}; で全てのi[n<6]の値は0になりますか?
投稿者---すずき(2005/10/16 09:57:52)


題名のとおりです。ささいな質問ですみません。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:int i[5]={}; で全てのi[n<6]の値は0になりますか? 23642 まきじ 2005/10/16 11:03:55
<子記事> Re:int i[5]={}; で全てのi[n<6]の値は0になりますか? 23646 rvr_driver 2005/10/16 11:47:19


No.23642

Re:int i[5]={}; で全てのi[n<6]の値は0になりますか?
投稿者---まきじ(2005/10/16 11:03:55)


>int i[5]={}; で全てのi[n<6]の値は0になりますか?

なりません。
初期化子を記述しないとコンパイルエラーになるはずです。
i[5]={0}; とすれば 0 になります。


この投稿にコメントする

削除パスワード

No.23660

int i[5]={}; で全てのi[n<6]の値は0になりますか?
投稿者---すずき(2005/10/17 01:46:01)


>>int i[5]={}; で全てのi[n<6]の値は0になりますか?
>
>なりません。
>初期化子を記述しないとコンパイルエラーになるはずです。
>i[5]={0}; とすれば 0 になります。
ありがとうございます。
int i[5]={0,0};
でもいっしょでしょうか?
また、
static宣言は変数を0に初期化するようですが、
static int i[5];
や、
int i[5][5]={0};

でもすべて0に初期化されるのでしょうか?
また、どのブロックにも所属していない箇所でstatic宣言をする場合、
他のファイルからアクセスできなくするようですが、関数内で宣言したときと同じように、0に初期化するのでしょうか?


この投稿にコメントする

削除パスワード

No.23663

Re:int i[5]={}; で全てのi[n<6]の値は0になりますか?
投稿者---まきじ(2005/10/17 07:57:22)


>int i[5]={0,0};

初期化子の数が足らないのでコンパイルエラーになります。

>static int i[5];
>int i[5][5]={0};
>でもすべて0に初期化されるのでしょうか?

されます。

>関数内で宣言したときと同じように、0に初期化するのでしょうか?

最初に関数が呼び出された時の一度だけ 0 に初期化されます。


この投稿にコメントする

削除パスワード

No.23664

Re:int i[5]={}; で全てのi[n<6]の値は0になりますか?
投稿者---まきじ(2005/10/17 08:00:04)


>>int i[5]={0,0};
>初期化子の数が足らないのでコンパイルエラーになります。

間違いでした。 i[0] と i[1] だけ初期化されます。


この投稿にコメントする

削除パスワード

No.23665

Re:int i[5]={}; で全てのi[n<6]の値は0になりますか?
投稿者---YuO(2005/10/17 08:28:47)


>>int i[5]={0,0};
>初期化子の数が足らないのでコンパイルエラーになります。

違います。
int i[5] = { 0, 0, 0, 0, 0 };
と同じですから,コンパイルエラーにはなりません。
# = { 0 }が特殊なのではない。


初期化子の{}内には1個以上の代入式が必要ですが,
# ISO/IEC 9899:1999 6.7.8 Initialization / Paragraph 1(Syntax)
式の数が不足している場合は,静的なオブジェクトを初期化するように初期化されます。
# 同 Paragraph 21
つまり,
  • ポインタ型は空ポインタで初期化
  • 算術型は(正または符号無しの)0で初期化
  • 集成体は,すべてのメンバをこのルールを再帰的に適用して初期化
  • 共用体は,最初の名前付きメンバにこのルールを再帰的に適用して初期化
となります。
# 同 Paragraph 10


この投稿にコメントする

削除パスワード

No.23673

Re:int i[5]={}; で全てのi[n<6]の値は0になりますか?
投稿者---まきじ(2005/10/17 17:07:14)


>式の数が不足している場合は,静的なオブジェクトを初期化するように初期化されます。

ご指摘ありがとうございまいす。
X3010 で確認しました。

={1} は ={1,0,0,0,0} と同じなんですね
={1,1,1,1,1} と同じと思ってました。
普段 ={0} はよく使うけど ={1} なんて事しないから気付かなかった。


この投稿にコメントする

削除パスワード

No.23671

Re:int i[5]={}; で全てのi[n<6]の値は0になりますか?
投稿者---TT414(2005/10/17 14:57:12)


>最初に関数が呼び出された時の一度だけ 0 に初期化されます。

違います。
mainが実行される前にです。


この投稿にコメントする

削除パスワード

No.23672

Re:int i[5]={}; で全てのi[n<6]の値は0になりますか?
投稿者---まきじ(2005/10/17 16:56:30)


>違います。
>mainが実行される前にです。

「どのブロックにも所属していない箇所でstatic宣言をする場合」を
見逃してました。


この投稿にコメントする

削除パスワード

No.23674

Re:int i[5]={}; で全てのi[n<6]の値は0になりますか?
投稿者---RAPT(2005/10/17 18:07:47)


>>最初に関数が呼び出された時の一度だけ 0 に初期化されます。
>
>違います。
>mainが実行される前にです。
というより、実行時、その行が解釈されるとき、だったような。
これって、C++のみ? Cも?
# 聞いた話なので自信ありませんが。


この投稿にコメントする

削除パスワード

No.23675

Re:int i[5]={}; で全てのi[n<6]の値は0になりますか?
投稿者---Hermit(2005/10/17 20:59:21)


>static宣言は変数を0に初期化するようですが、
>static int i[5];
>や、
>int i[5][5]={0};
>でもすべて0に初期化されるのでしょうか?

初期化されない例で、昔こんなのがありました。
今はどうなってるかわかりません(bcc32使ってるので)
(インデントしてないので適当に見やすくしてね)
#include <stdio.h>
int main(int argc, char **argv) {
switch(argc) {
int no[2] = {0};
case 0:
default:
printf(
"argc = %d\n"
"no[0]=%d\n"
"no[1]=%d\n",
argc,no[0],no[1]);
}
return 0;
}



この投稿にコメントする

削除パスワード

No.23676

Re:int i[5]={}; で全てのi[n<6]の値は0になりますか?
投稿者---RAPT(2005/10/17 21:21:24)


わわっ、これ、コンパイルエラーにならないのね・・・。(VC++6sp6)
(整形してみました。)

#include <stdio.h>

int main(int argc, char ** argv)
{
    switch(argc) {
        int no[2] = {0};
    case 0:
    default:
        printf("argc = %d\nno[0]=%d\nno[1]=%d\n", argc, no[0], no[1]);
    }
    return 0;
}




この投稿にコメントする

削除パスワード

No.23646

Re:int i[5]={}; で全てのi[n<6]の値は0になりますか?
投稿者---rvr_driver(2005/10/16 11:47:19)


細かいですが、i[5]は領域範囲外です。


この投稿にコメントする

削除パスワード

No.23661

int i[5]={}; で全てのi[n<6]の値は0になりますか?
投稿者---すずき(2005/10/17 01:46:56)


>細かいですが、i[5]は領域範囲外です。
ご指摘ありがとうございます。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧