トップページ > プログラム > 2016年02月12日 > LK6Hhi/I

書き込み順位&時間帯一覧

15 位/174 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000200000000002



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
780
C言語なら俺に聞け(入門編)Part 131 [転載禁止]©2ch.net

書き込みレス一覧

C言語なら俺に聞け(入門編)Part 131 [転載禁止]©2ch.net
780 :デフォルトの名無しさん[sage]:2016/02/12(金) 13:05:19.83 ID:LK6Hhi/I
>>774
実際のところ >>776 の言う通り、細かいことを気にしないのが良い。
「ソースを書くときに直感的かつ楽チンに書けるように仕様を定めたら、
仕様書の方がえらく複雑になっちゃった」という、いかにもCらしいお話の結果だ。

あえて説明するなら下のような意味かな。
……これは自信がないので詳しい人の添削を求む。

#include <stdio.h>

static int func(int arg) {
 printf("関数 %s() が引数 %d で呼ばれた\n", __func__, arg);
 return arg;
}

int main()
{
 int (*pfunc)(int arg); /* pfunc: 関数へのポインタを格納する変数 */

 pfunc = func; /* (1) */
 pfunc = &func; /* (1') */

 pfunc(200); /* (2) */
 (*pfunc)(201); /* (2') */
 func(300); /* (3) */

 return 0;
}

(改行多過ぎエラーが出たのでつづく)
C言語なら俺に聞け(入門編)Part 131 [転載禁止]©2ch.net
781 :780[sage]:2016/02/12(金) 13:05:58.13 ID:LK6Hhi/I
( >>780 のつづき )

「関数は、式の中では『関数へのポインタ』に自動的に変換される」
(1)のように書ける、ということ

「アドレス演算子&のオペランドであるときは例外」
(1')のように書いても(1)と同じ意味、ということ

「sizeof演算子のオペランドのときは例外」
これはどういう意味だろう?

「関数呼び出し演算子()は『関数』ではなく『関数へのポインタ』をオペランドとする」
(2)のように書いて関数を呼び出せること
(2')のような書き方をする必要はない(書いても同じように動作するけど)ということ

最後に、普通の関数の呼び出し(3)は「まずfuncが関数へのポインタに自動的に変換され、
次いで変換結果である関数へのポインタに対して関数呼び出し演算子()が作用する」
てな具合に動作しているのだ。理屈の上では。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。