質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

3回答

832閲覧

for文の記法について

movswr

総合スコア13

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2021/05/27 01:34

C

1for (i=0; arr1[i]; i++);

このような記法はありますか?またどういう意味でしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

itagagaki

2021/05/27 01:37

具体的にどこが疑問ですか?
movswr

2021/05/27 01:41

for文は、for (初期化;条件;カウンタ) {ループ内で行う任意の処理;}、という使い方しか知らないので、このような記法は初めて見た上に何を行なっているのかすらわかりません。for文の後にいきなりセミコロンが来ているのがよくわかりません
nob.

2021/05/27 01:51

多分、arrl[] の中の、0である最初の要素を探しているのでしょう。
movswr

2021/05/27 01:54

つまり、配列に0が含まれていない場合は最終的に、iに配列の要素数が入るということでしょうか?
cateye

2021/05/27 02:05 編集

>配列に0が含まれていない場合・・・は、配列の範囲を通り過ぎて0が現れるまでiが増加します。 ・・・バグです^^; なので、iは「配列の要素数」にはなりません。
movswr

2021/05/27 03:40

仮にarr1がchar型の配列だったら、配列末尾の¥0がfalse判定になってループをぬけますか?
guest

回答3

0

for文の後にいきなりセミコロンが来ているのがよくわかりません

forの後ろに来るのは文またはブロックですね。
セミコロンだけの文は「空文」と呼ばれます。
空文についてはこちらで理解できると思います。
空文とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

投稿2021/05/27 01:58

itagagaki

総合スコア8402

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

for ( A; B; C) D は

C

1A 2while ( B ) { 3 D 4 C 5}

と等価です。
なので for (i=0; arr1[i]; i++); は

C

1i = 0; 2while ( arr1[i] ) { 3 i++; 4}

「i = 0 から始めて arr1iである間 iに1を足す」んだから、
「arr1[] 内にある最初の0 が見つかった位置」がiに求まります。

※ char arr1[] の場合「文字列 arr1 の長さ」てことになりますね。

投稿2021/05/27 02:01

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

movswr

2021/05/27 03:28 編集

char arr1[]の場合だとiが文字列の長さになるのは、配列の最後の¥0がfalse判定になってループを抜けるからですか?
episteme

2021/05/27 04:03

YES. 文字列は'\0'で終端するキマリになっていますから。
kazuma-s

2021/05/27 10:36

「for (A; B; C) D」は 「A; while (B) { D C; }」とほぼ等価です。 セミコロンに注意。 また、A; が「int i = 0;」のような宣言の場合、i のスコープにより等価ではありません。 D が continue; を含むブロックの場合も等価ではありません。 for文では C が評価され、while文では C; は実行されません。
guest

0

このような記法はありますか

はい

またどういう意味でしょうか?

Cのfor文の書式は以下ですが

C

1for (初期化;条件式;変化式) 2 ループ内で処理する文

この条件式部分は、値が0以外なら続行としています。

よくi < 5 などと書くと思いますが、これも真ならば1、偽ならば0を返しています。

というわけで、
for (i=0; arr1[i] != 0; i++);と意味は一緒です。

for文の後にいきなりセミコロンが来ているのがよくわかりません

単純に何もループ内でする処理がないだけです。

投稿2021/05/27 01:43

編集2021/05/27 01:48
ozwk

総合スコア13532

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問