はじめまして。関数の呼び出しはfunction()などと、たとえvoidであろうが、関数名の後にカッコをつける必要があると理解しています。
下記プログラムの12行目でhelloと呼び出しされております。
実際にプログラムを動かしてみても、理解できず、ネットで検索しても発見することが出来ませんでした。
hello()としない理由、なぜhelloなのかご教示いただきたいです。
よろしくお願いします。
*当プログラムは「C言語ポインタ完全制覇」(p.100)記載のものです。
関数呼び出しのカッコについて
Re: 関数呼び出しのカッコについて
このコードは12行目で確保された領域の範囲外にアクセスする危険なコードであり、実行してはいけません。
【追記】
「C言語 ポインタ完全制覇」のページのサンプルソースを調べた所、
stackoverflow.cがこのコードに近かったです。本は読んでいないので断定はできませんが、つまりそういうことでしょう。
【追記】
「C言語 ポインタ完全制覇」のページのサンプルソースを調べた所、
stackoverflow.cがこのコードに近かったです。本は読んでいないので断定はできませんが、つまりそういうことでしょう。
最後に編集したユーザー みけCAT on 2016年2月27日(土) 23:38 [ 編集 1 回目 ]
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 関数呼び出しのカッコについて
hello()としない理由は、関数を呼び出さず、その関数へのポインタを使いたいからでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 関数呼び出しのカッコについて
呼び出していません。picchi さんが書きました:下記プログラムの12行目でhelloと呼び出しされております。
関数も、変数と同じようにメモリー空間中のどこかに存在しますから、
アドレスを持っています。
今回のプログラムでは、helloという関数のアドレス(メモリー空間中のどこにあるか、という情報)を
配列に格納しようとしています。
他の回答者さんからの指摘のとおり
10個分しか確保していない配列に対し、それを超えた領域に格納しようとしているので、
何か変なことが起きるでしょう。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: 関数呼び出しのカッコについて
仰るとおり、参照先はstackoverflow.cです。サンプルソースまで調べていただき深謝します。みけCAT さんが書きました:このコードは12行目で確保された領域の範囲外にアクセスする危険なコードであり、実行してはいけません。
【追記】
「C言語 ポインタ完全制覇」のページのサンプルソースを調べた所、
stackoverflow.cがこのコードに近かったです。本は読んでいないので断定はできませんが、つまりそういうことでしょう。
詳しい方が見ると、見ただけで危険なコードってのが判るものなんですね。
関数へのポインタを意味するのですね?勉強になりました。みけCAT さんが書きました:hello()としない理由は、関数を呼び出さず、その関数へのポインタを使いたいからでしょう。
ありがとうございました。
Re: 関数呼び出しのカッコについて
ご回答ありがとうございます。関数のアドレスを示す場合はカッコを付けないということを理解できました。box さんが書きました: 呼び出していません。
関数も、変数と同じようにメモリー空間中のどこかに存在しますから、
アドレスを持っています。
今回のプログラムでは、helloという関数のアドレス(メモリー空間中のどこにあるか、という情報)を
配列に格納しようとしています。
for文の中の意味まで解説いただき、ありがとうございました。
ちなみに私の環境(gcc ver4.9.3)では、19回「hello!」と表示されました。
19回表示されたという現象ではなく、なにか変なことが起こっていると、考えるのが妥当ですね。
スッキリ解決です。