こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

[C言語] 配列が添字の意味を失う理由

はじめまして。こんばんは。

早速ですが、下記のソースコードは、

配列aの各要素の内容を先頭から順に調べ、最初に0であった要素の添字番号を表示する。

という内容の、C言語のプログラムです。(C++でコンパイルするためmain()はint型に指定)

そこで、このプログラムを実行していて腑に落ちない点として、
プログラムの挙動を見る限り、
タイトルに書いたとおり、
「配列が添字の意味を失っている」という事なんです。

普通に配列の添字と考えれば、

while文の条件式は、

int i=0;
while(a[i])
{
i++;
}

なので、a[0]になるはずなので、

普通に考えれば
条件式の中身としては
 配列a[0] が 配列a[0] になるまでi++をするとなるはずです。

しかしながら、このプログラムは、
初期値に「0」が入っている要素まで探し続けます。

なぜ、
「配列が添字の意味を失うのか?」
どなたか、この疑問にお答えしていただけますと幸いです。








「プログラムの内容」
配列aの各要素の内容を先頭から順に調べ、最初に0であった要素の添字番号を表示する。

「表示結果」

a[2]= 0

「ソースコード」

#include<stdio.h>

int main()
{
int a[]={3,0,7,8,5,5,8};
int i=0;

while(a[i])
{
i++;
}

printf("a[%2d]=%2d \n",i,a[i]);

}

投稿日時 - 2009-08-22 20:50:51

QNo.5228444

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

>普通に考えれば
>条件式の中身としては
> 配列a[0] が 配列a[0] になるまでi++をするとなるはずです。
なりません。
というか「配列a[0] が 配列a[0] になるまで」の意味が解りません
配列の値を左シフトするプログラムかなにかと勘違いしていませんか?

>しかしながら、このプログラムは、
>初期値に「0」が入っている要素まで探し続けます。

>配列aの各要素の内容を先頭から順に調べ、最初に0であった要素の添字番号を表示する。
この問題の解を出しており
動作に問題ないです

あと、
>「表示結果」
>a[2]= 0

>int a[]={3,0,7,8,5,5,8};
の結果ならば、
a[1]=0
の間違いですね

なにか、根本的に問題に対して勘違いされていませんか?

投稿日時 - 2009-08-22 21:20:32

お礼

ご回答ありがとうございます。
完全に勘違いしてました。

良く、見直したら、大丈夫でした(^^;)
ありがとうございました。

投稿日時 - 2009-08-22 21:26:19

あなたにオススメの質問