2

これについてはかなり曖昧になり、申し訳ありません。これは宿題です。私は何かを学ぼうとしているので、答えではなく説明が必要です。質問は

  What is the datatype of thisThing

これは実際のコードではなく、同様の例です

  int* (*thisThing[])(int*, int*) = {someFunction1, someFunction2}

私が理解していることから、thisThingの「データ型」は単にintです。ただし、関数の戻り値の型が「データ型」と呼ばれているのを見たことがありません。これには理由がありますか?Cの関数へのポインタがあることは知っています。それらのポインターは変数ポインターと変わらないのですか? どんな説明でも大歓迎です!

4

4 に答える 4

3

thisThing の「データ型」は単に int です

実際には、ポイント先の関数がある関数ポインターの配列です。

int *fun(int *, int *);

スパイラル ルールを調べる必要があります。

于 2012-07-10T17:33:46.287 に答える
0

変数aint

int a;

bの配列内の変数int

int b[] = {3, 4};

変数は:cへのポインタです。int

int *c = &a;

タイプを作成することもできます。たとえば、:dへのポインタの配列です。int

int *d[] = {c, b}

変数は、単一のパラメーターとしてポインターをe返し、受け取る関数へのポインターです。intint

int (*e)(int*);

したがって、のタイプはthisThing何ですか?明らかにそれは単純ではありませんint...

int* (*thisThing[])(int*, int*) = {someFunction1, someFunction2}
于 2012-07-10T17:41:01.533 に答える
0

「データ型」は C 標準で使用される用語ではありません。正しい用語は「タイプ」です。

int* (*thisThing[])(int*, int*)あなたの場合、次のように呼び出すことができることがわかるように宣言された値が与えられた場合、int *result = (*thisThing[0])((int *)0, (int *)0)その型の名前は、関数を取る関数へのポインターの長さの指定されていない配列 (pointer-to-int、pointer-to-int) であり、 pointer-to int を返します

関数へのポインタは、データへのポインタと似ていますが異なります。重要なことに、それらは交換可能ではなく、たとえば、関数ポインターをキャストすることはできませんvoid *(一方、任意のデータ ポインターでキャストできます)。これは、関数ポインターとデータ ポインターの表現が異なるプラットフォームでプログラムが確実に実行されるようにするためです。

于 2012-07-10T17:44:08.837 に答える
0

thisThing は、a へのポインターの配列です (整数への 2 つのポインターを引数として取り、整数へのポインターを返す関数)。"K&R" C book から複雑な宣言の章を読んでみてください。

于 2012-07-10T17:36:56.330 に答える