K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]

新規投稿 | 開設者ホームページへ戻る | ヘルプ

[2296] 「関数へのポインタにおける混乱」の「intを返す」という記述について
投稿者:jcv
2022/06/13 17:38:41

3-5-4 関数へのポインタにおける混乱(C言語 ポインタ完全制覇(旧版)) 3-5-5 関数へのポインタにおける混乱(C言語 ポインタ完全制覇(第2版)) の、以下の記載に関してです。 > しかし,C の宣言をここまでに述べた規則に基づいて解釈すれば,たとえばint func();という宣言において,funcは「intを返す関数」であり,funcだけを取り出して「intを返す関数へのポインタ」になるのは変です.関数へのポインタが必要なら,&を付けて,&funcとしなければならないはずです. この文章ですが、何度か読んでいるのですが、実は今迄理解出来ていませんでしたが、読み飛してしまっていました。今回、改めて読み直してやっと理解する事が出来ました。わかってしまえば、大した事ではないのですが、他の方が同じ疑問を持たれている可能性もありますので、お知らせしておきます。 上記文章では「intを返す関数」と、『intを返す』が「」の中に入って強調されていますが、実はここではintを返す事自体は重要ではありません。 これがわかりにくくしていると思います。仮に「intを返す」を抜いてみると、 > しかし,C の宣言をここまでに述べた規則に基づいて解釈すれば,たとえばint func();という宣言において,funcは「関数」であり,funcだけを取り出して「関数へのポインタ」になるのは変です.関数へのポインタが必要なら,&を付けて,&funcとしなければならないはずです. となります。この方がずっと理解しやすくなると思います。もし、「intを返す」を入れるのであれば、以下の様に括弧に入れた方が良いと思います。 > しかし,C の宣言をここまでに述べた規則に基づいて解釈すれば,たとえばint func();という宣言において,funcは(intを返す)「関数」であり,funcだけを取り出して(intを返す)「関数へのポインタ」になるのは変です.関数へのポインタが必要なら,&を付けて,&funcとしなければならないはずです. いかがでしょうか?
[この投稿を含むスレッドを表示] [この投稿を削除]
[2297] Re:「関数へのポインタにおける混乱」の「intを返す」という記述について
投稿者:(ぱ)こと管理人
2022/06/15 00:37:54

こんにちは。 >> しかし,C の宣言をここまでに述べた規則に基づいて解釈すれば,たとえばint func();という宣言において, >>funcは「intを返す関数」であり,funcだけを取り出して「intを返す関数へのポインタ」になるのは変です. >>関数へのポインタが必要なら,&を付けて,&funcとしなければならないはずです. >上記文章では「intを返す関数」と、『intを返す』が「」の中に入って強調されていますが、 >実はここではintを返す事自体は重要ではありません。 intを返す事自体は重要ではない、というのはその通りです。 ただ、この本の3章でかなり強調して説明しているのは、Cの宣言の読み方です。 「識別子を起点に優先順位に基づいて英語順に読む」という読み方を前半で説明しているので、 「C の宣言を『ここまでに述べた規則に基づいて』解釈すれば,」と書いているわけです。 3章前半で説明した規則に基づいてint func();を解釈すれば、やはり「intを返す関数」です。 「intを返す」は確かにそう重要ではないですが、だからってここでだけそこをはしょってしまったら、 混乱する読者もいるのではないでしょうか。
[この投稿を含むスレッドを表示] [この投稿を削除]