我对此非常模糊,对不起。这是家庭作业,我正在努力学习一些东西,所以不要真正想要答案,而是要解释。问题是
What is the datatype of thisThing
这不是实际的代码,而是一个类似的例子
int* (*thisThing[])(int*, int*) = {someFunction1, someFunction2}
据我所知,thisThing的“数据类型”只是一个int。但是我从未见过函数返回类型被称为“数据类型”。是否有一个原因?我知道有C指向函数的指针;那些指针与变量指针没有什么不同?任何解释都很受欢迎!
答案 0 :(得分:3)
答案 1 :(得分:0)
thisThing是一个指向a的函数的数组(函数将两个指向整数的指针作为参数并返回指向整数的指针)。您可以阅读“K& R”C书中复杂声明的章节。
答案 2 :(得分:0)
变量a
是int
:
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 *
(而你可以用任何数据指针执行此操作)。这是为了确保您的程序在函数指针和数据指针具有不同表示的平台上运行。