这个声明"float (*x[20])(int *a)"是什么意思?
What this declaration "float (*x[20])(int *a)" means?
我在某处发现了这个奇怪的变量声明 -
float (*x[20])(int *a);
这可能意味着什么?
它的目的是什么?
float (*x[20])(*int a)
不正确。它应该是float (*x[20])(int *a)
将x
声明为一个包含 20 个指针的数组,该函数接受int *
类型的参数并返回 float
。
对于那些想知道函数指针数组使用法的人:
typedef double Func(double, double); // Declare a double (double, double)
Func sum, subtract, mul, divide; // Function prototypes.
Func *p[] = { sum, subtract, mul, divide }; // Array of function pointers
int main(void)
{
double result;
double a, b;
int option;
printf("This is a simple calculator to add, subtract, multiply and divideide two integersn");
printf("Enter two integers: ");
scanf("%lf %lf", &a, &b);
printf("Choose an option:n 1. Addn 2. Subtractn 3. Multn 4. Dividen");
scanf("%d", &option);
result = p[option - 1](a, b);
printf("result = %lfn", result);
}
double sum(double a, double b) { return a+b; }
double subtract(double a, double b) { return a-b; }
double mul(double a, double b) { return a*b; }
double divide(double a, double b) { return a/b; }
这里讨论了如何阅读/破译这种复杂声明的详细说明。
这是一个
函数指针数组。 它有 20 个函数指针项。
声明
float (*x[20])(int *a);
将变量 x 定义为包含 20 个函数(函数指针)的数组。以我的拙见,它写得更清楚
Function x[20];
跟
typedef float (*Function)(int *a);
如果没有上下文,x 的目的很难说出来,它可能是在给定一组整数和用户输入的函数索引的情况下计算一个统计值,如平均值、方差或标准偏差等:
x[0] = Average;
x[1] = Variance;
x[2] = StandardDeviation;
...
int a[100];
int i;
/*read data into `a' and function index into i...*/
printf("%fn", x[i](a));
代码应该是这样的: - float (*x[20])(int *a);
- (*int a)
似乎是不正确的。代码告诉我,x 是一个由 20 个指针组成的数组,每个指针都接受一个数据类型为 int 的参数并返回浮点数。
相关文章:
- "类模板示例<int>;"语句对 C++11 是什么意思?
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- C++ 未初始化的本地(非全局)int 数组中的元素类型到底是什么?
- map<string, int> m= {}; 在C++中是什么意思?
- 行 - " vector<int> used(adj.size(), 0); "是什么意思?
- 使输出流式处理运算符适用于 boost::variant<std::vector<int>、int、double 的正确方法是什么>
- 代码中的"vector<<int>vector>&index"是什么意思?
- 在这种情况下,int**在C中是什么意思
- "1L << count"是什么意思?如何使用超出"unsigned long long int? "范围的语句编号打印?
- "int(i)=1;"是什么意思?
- freq_table[field_pm_value] = map<string, int>(); 是什么意思?
- 统一初始化是隐式发生的,即使 int 强制转换运算符是使用 explicit 关键字声明的.原因是什么?
- map<int,int>的*迭代器是什么?它不是pair<int,int>
- 在C#中等效于未签名的长Int是什么
- "cannot Convert vector<int>* to int"是什么意思?
- <T::* int>是什么意思?
- C++中的新Bytef[int]是什么
- *new int是什么意思?
- A<int(int)>是什么意思?这项技术叫什么名字?