考虑C中函数的“数据类型”?

时间:2012-07-10 17:31:11

标签: c

我对此非常模糊,对不起。这是家庭作业,我正在努力学习一些东西,所以不要真正想要答案,而是要解释。问题是

  What is the datatype of thisThing

这不是实际的代码,而是一个类似的例子

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

据我所知,thisThing的“数据类型”只是一个int。但是我从未见过函数返回类型被称为“数据类型”。是否有一个原因?我知道有C指向函数的指针;那些指针与变量指针没有什么不同?任何解释都很受欢迎!

4 个答案:

答案 0 :(得分:3)

  

thisThing的“数据类型”只是一个int

它实际上是一个函数指针数组,其中指向的函数是:

int *fun(int *, int *);

您应该查看spiral rule

答案 1 :(得分:0)

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

答案 2 :(得分: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}

答案 3 :(得分:0)

“数据类型”不是C标准中使用的术语;正确的术语是“类型”。

在您的情况下,给定一个声明为int* (*thisThing[])(int*, int*)的值,您可以看到它可以被称为:int *result = (*thisThing[0])((int *)0, (int *)0),因此其类型的名称是未指定长度的指针数组函数获取(指向int的指针,指向int的指针)和返回指向int的指针

指向函数的指针类似于,但指向数据的指针不同;重要的是,它们不可互换,例如你不能将函数指针强制转换为void *(而你可以用任何数据指针执行此操作)。这是为了确保您的程序在函数指针和数据指针具有不同表示的平台上运行。