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

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

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

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

Q&A

解決済

1回答

209閲覧

c言語の関数の実装内容の初歩的な質問(プログラムの省略?)

gamuq

総合スコア3

C

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

0グッド

0クリップ

投稿2020/05/26 18:09

色々な関数の実装内容を見ているのですが,省略されて書かれているようなものが多く,理解できません.
例えばstrstr()関数の
if(!*sub)やwhile(*cp)やwhile(*s1 && *s2 && !(*s1-*s2))などです.
またそれらの書き方がまとまっているものがありましたらお教えください.

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

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

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

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

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

guest

回答1

0

ベストアンサー

それらの書き方を覚えようとするのはあまり意味がありません。
それよりも、ifやwhileは何を持ってして動きを変えているのか?ということを理解したほうが早いです。
C言語において、真偽値というのは数値です。
0であれば偽を、それ以外の全ての数値は真を表します。
そして、ifやwhileが見ているのは()の中の式ではなく、その値のみです。
純粋にその値が、0かそれ以外か、という点しか見ていません。

その為、
if(1)文;
と書けば必ず文は実行されます。

while(300)文;
と書けば、文は300回……では無く無限に実行されます。
何回回っても300は0以外なので真だからです。

そういう視点で見れば、
while(*cp)
というのは、
while(*cp!=0)
と同義だとわかります。
このcpが何かは不明ですが、文字列へのポインタであったと仮定し、ループの度にインクリメントされるものであると仮定すれば
*cpが何らかの文字である間は0意外なのでループが周り、ポインタが進みます。
最後のヌル文字に到達したとき、ヌル文字の文字コードは、0ですので、
*cp=='\0'==0==偽
となり、
while(偽)
となってループが終了します。

そういった感じに、形で覚えるのでは無く、どういう時にどういう動作を行うか、どういう意図で書かれたものかを考えるようにすると、分かりやすいかと思います。

投稿2020/05/26 18:34

amiya

総合スコア1218

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

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

gamuq

2020/05/26 18:41

なるほど,ifやwhileが0か1かしか見ていないということを初めて知りました. 形を暗記しようとするつもりはなかったのですがそもそもの仕様を理解していませんでした. 解決致しました.ありがとうございました.
kazuma-s

2020/05/26 23:08

「0か1かしか見ていない」ではありません。 「『0』か『0でない』かしか見ていない」です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問