【发布时间】:2016-02-19 16:51:06
【问题描述】:
在 Xcode 7.2.1 中,我声明了 3 个 C 函数
double function1(double);
double function2(double);
double function3(double);
现在我声明一个指向函数的指针并定义它。
double (*aFunctionPointer)(double)=function1;
没有错误,正如预期的那样。
现在我声明一个函数指针数组并用我的 3 个函数填充它。
double (*anArrayOfFunctionPointers[3])(double)={function1, function2, function3};
再一次,没有错误。
现在我定义了一个函数指针数组,但不要填充它。
double (*anotherArrayOfFunctionPointers[3])(double);
再一次,没有错误。
现在我尝试为其中一个数组元素分配一个函数。
anotherArrayOfFunctionPointers[1]=function2;
这一次,警告和错误:
- 警告:缺少类型说明符,默认为 int
- 错误:使用不同类型重新定义“anotherArrayOfFunctionPointers”:“int [0]”与“double (*[3]) (double)”
我被难住了。
背景是我正在尝试编写一个程序来在各种度量单位之间进行转换。我想我会使用一个包含函数指针的二维数组,以避免一些非常冗长的 switch 语句。
要进行转换,我会调用如下函数:
result=convert(someValueToConvert,yards,meters);
并且转换函数会从数组中调用正确的函数,如下所示:
return conversionFunctionArray[yards, meters](someValue);
数组会这样初始化:
conversionFunction[yards][meters]=yardsToMeters(somevalue);
conversionFunction[meters][yards]=metersToYards(somevalue);
conversionFunction[yards][feet]=yardsToFeet...
...
关于函数指针和数组,我缺少什么?
【问题讨论】:
-
typedef是处理函数指针时非常有用的工具。尝试使用typedef double (*funcPtr_t)(double);之类的方法来创建函数指针类型,然后尝试使用funcPtr_t funcPtrArray[3];之类的方法来创建数组。 -
错误清楚地表明您已经重新定义 anotherArrayOfFunctionPointers。因此,在您的测试代码中的某处,您对该数组有一个较旧的定义。请注意,我逐行遵循了您的所有说明,没有收到任何错误或警告。这就是为什么该网站要求调试问题必须包含Minimal Complete Verifiable Example。
标签: c multidimensional-array function-pointers