質問: 関数ポインタについて c言語によるunixシステムにプログラミング入門という本を読みながらc言語を勉強しています。 しかし、サンプルとして提示された下記の内容の意味がわかりません。 分からない箇所が「関数ポインタ」と呼ばれるものがついているということが分かった程度で、どういう意図で記述されているのかがわかりません。 分からないプログラムの処理内容は、ファイル内のデータを16進数で表示するというものです。 分からない箇所を記します。 #include #define buff 17 /*buffer*/ #define err -1 /*system call error*/ void usage(void); /*put usage message*/ char *command_name /*command name*/ file *fpin; /*file pointer*/ main(int argc,char *argv[ ]){ char *rindex(const char*s,int c); /*末尾から文字列検索*/ void hexdump(void); ... ... } void hexdump(void){ ... ... } void usage(){ ... ... } 不明なのは、main関数の中の char *rindex(const char*s,int c); /*末尾から文字列検索*/ void hexdump(void); です。 cについて、不明なところが多いので、利用する関数は使う前に宣言しなければいけない程度の理解ですが、そうだとしてもusageメソッドはmain関数の外であるのに、rindexとhexdumpは何故main関数の中で宣言されているのでしょうか。 上記の不明点とは別で、rindexの前にポインタが付いていると思うのですが、hexdumpやusageにはついていません。 知人からは、関数までのポインタを返すとのことでしたが、用途もいまいち理解できません。 全てではなくてもいいので、ヒントをいただけるとうれしいです。 よろしくお願いします。
回答: 全体がわからないので嘘言ってたらすいません >usageメソッドはmain関数の外であるのに、rindexとhexdumpは何故main関数の中で宣言されているのでしょうか。 メソッドというか関数ですね 基本的にはどちらで宣言しても問題はありませんが あえて分けられているのであれば そういつソース内の他の関数があってそちらでも(複数個所で) usage を使ってる rindexとhexdumpは main関数内でしか使わない ということなのかもしれません >関数までのポインタを返す 違います この言い方が適切か分かりませんが rindex 関数が charのデータ格納領域のアドレス(char *)を返す ということを意味します 関数までのポインタを返すわけではありません 例えば 文字列 abcde がアドレス 100番地から順番にセットされていたとして rindex を 使う事により aの位置を検索する様な場合 アドレス 100 が返り bの位置を検索する様な場合 アドレス 101 が返り 以後 同様 といったような関数の仕様になっているということです (実際の処理内容に合わせていません あくまでイメージ) voidに関しては有効な値がない事を意味します