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

thisThing 是一个指向 a 的指针数组(函数将两个指向整数的指针作为参数并返回一个指向整数的指针)。您可以阅读“K&R”C 书中复杂声明的章节。

于 2012-07-10T17:36:56.330 回答
0

变量aint

int a;

b数组中的变量int

int b[] = {3, 4};

变量c是指向的指针int

int *c = &a;

您还可以组合类型,例如,d是指向的指针数组int

int *d[] = {c, b}

变量e是指向函数的指针,该函数返回int并将指针int作为单个参数:

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) 和返回指向 int 的指针

指向函数的指针与指向数据的指针相似不同;重要的是,它们不可互换,例如,您不能将函数指针强制转换为void *(而您可以使用任何数据指针来实现)。这是为了确保您的程序在函数指针和数据指针具有不同表示形式的平台上运行。

于 2012-07-10T17:44:08.837 回答