C言語関係掲示板

過去ログ

No660 for(i = 0; b[i] = s[i]; i++)の意味

[戻る] [ホームページ]
No.7290

for文の特殊バージョンについて
投稿者---kan(2003/06/11 00:23:07)


for文で例えば
char s[] = "abc", b[];

for(i = 0; b[i] = s[i]; i++)

このfor文はs配列の文字をb配列にコピーしていって
なぜヌル文字でループ終了になるんでしょうか?

省略してすみません。

No.7294

Re:for文の特殊バージョンについて
投稿者---ともじ(2003/06/11 01:08:11)


こんばんは。

>for文で例えば
>char s[] = "abc", b[];
>
>for(i = 0; b[i] = s[i]; i++)
>
>このfor文はs配列の文字をb配列にコピーしていって
>なぜヌル文字でループ終了になるんでしょうか?

この b[i] = s[i]; はfor文の継続条件に書かれていますよね。
ですから、値が真の間、ループを継続します。
C言語での真とは、「0以外」です。ですから、b[i] = s[i]; では、
まず、b[i]へs[i]の代入が行われ、b[i]が '\0' でなければ次の
ループを実行します。s[i]が'\0'なら、b[i]も'\0'になるので、
ループは終了します。

なお、上記のソースで、宣言時に、b[] という記述はできませんね。
これは、要素数を指定して、b[10] のように書いてください。

No.7295

Re:for文の特殊バージョンについて
投稿者---TDa(2003/06/11 01:14:14)


どのくらいCに詳しいかわかりませんのでステップに分けます。

ステップ1
a = bを評価すると式全体の値は左辺の値になります。x = yの値はxです。
よってb[i] = s[i]の値はb[i]になります。

ステップ2
for (式1; 式2; 式3) 文
for文ではループに入るたびに式2が評価されてその値が非0ならば文が実行され
ます。

ステップ3
ナル文字'\0'の値は0です。

この3ステップがわかればループの動きが理解できるはずです。

No.7296

Re:for文の特殊バージョンについて
投稿者---kan(2003/06/11 08:15:54)


お教えいただきありがとうございました。