e是个指针,它指向的类型是个长度为2的数组。 #include "stdafx.h" #include <iostream> using namespace std; //直接定于typedef doube(*)() (*e)[2];不行,但用以下两句代替: typedef double (*pFun)();//定义函数指针pFun typedef pFun (*e)[2];//定义型别e,是个指针 double Fun1() { cout<<"Fun1"<<endl; return 1; }; double Fun2() { cout<<"Fun2"<<endl; return 2; }; int main() { pFun array[2]= {Fun1, Fun2}; array[0]();//执行Fun1 array[1]();//执行Fun2 //示例 //e MyE = &array;//将array的首地址赋给MyE cout<<sizeof(MyE)<<endl;//既然是指针,长度自然为4(32位机上) cout<<sizeof(*MyE)<<endl;//(两个指针)长度为8(32位机上) (*MyE[0])();//执行Fun1,注意优先级,其实就是 (*(MyE[0]))(); //(*MyE[1])();//此句将导致异常。很简单,地址位移了8,指到array后面了。注意MyE[1];等价于MyE++; (*MyE)[0]();//执行Fun1 (*MyE)[1]();//执行Fun2 return 0; }