#include <stdio.h>
char func1()
{
return 'a';
}
char func2()
{
return 'b';
}
char func3()
{ return 'c';
}
char (*xarr[])()={func1,func2,func3};//xarr是一个数组
//这个数组有3个指向函数的指针,指针所指(返回)数据类型为字符型。
char (*((*x())[]))()
{
return &xarr;
}
int main()
{
printf("%c\n",((*(x()))[0])());//x是一个函数
//这个函数返回值为指针,这个指针指向数组中的第一个元素
//这个元素的返回值为这第一个函数的返回值
return 0;
}
具体图片如下
#include <iostream>
#include <stdio.h>
char func1()
{
return 'a';
}
char func2()
{
return 'b';
}
char func3()
{
return 'c';
}
char (*xarr[])() = { func1,func2,func3 };//xarr是一个数组
//这个数组有3个指向函数的指针,指针所指(返回)数据类型为字符型。
/*
char (*((*x())[]))()
{
return &xarr;
}*/
int main()
{
printf("%c\n", (xarr[0])());//x是一个函数
//这个函数返回值为指针,这个指针指向数组中的第一个元素
//这个元素的返回值为这第一个函数的返回值
system("pause");
return 0;
}
那个x函数返回值不是报错了么
还有就是为什么不直接调用。。。
这不是警告么,可以运行。显式类型不一致,但可以隐式转换,所以还是可以运行的。
就比如你把 int*传递给char*,都是指针,可以隐式转换,但类型不一致,给你个提醒
typedef char (*FP[3])();
FP& x()
{
return xarr;
}
int main()
{
printf("%c\n", (x()[0])());//x是一个函数
//这个函数返回值为指针,这个指针指向数组中的第一个元素
//这个元素的返回值为这第一个函数的返回值
system("pause");
return 0;
}
用typedef吧,那代码看着头疼
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html