//
// Created by PC-Saw on 2019/1/24.
//#include <iostream>#define TEST 2/* 1. */ typedef int* (*(*fp1)(int))[10]; // 首先是一个函数指针,接受一个int型参数,返回一个指向10个int指针数组的指针
/* 2. */ typedef int (*(*fp2)(int,int,float))(int); // 首先是一个函数指针,接受三个参数,返回一个指向函数的指针,该函数接受一个int,返回int
/* 3. */ typedef int (*(*(*fp3)())[10])(); // 首先是一个函数指针,该函数没有参数,且返回一个指向含有10个函数指针的数组,该函数不接受参数,返回int
/* 4. */ int (*(*f4())[10])(); // 首先是一个函数,返回一个指针,指向了包含10个函数指针的数组int* (*(func1)(int))[10]
{std::cout << "func1() " << std::endl;//int *(*retPtrInt)[10] = (int*(*)[10])new int*[10];int *(*retPtrInt)[10] = new int*[1][10];for (int i = 0; i < 10; ++i) {int *tmp = new int;*tmp = i;(*retPtrInt)[i] = tmp;}return retPtrInt;
}int func2(int)
{std::cout << "func2() " << std::endl;return 0;
}typedef int(*funcInt)(int);int (*func3(int,int, float))(int)
{std::cout << "func3() " << std::endl;funcInt *retPtrFunc = new funcInt;*retPtrFunc = &func2;return *retPtrFunc;
}int (*(*(func5)())[10])()
{}int main()
{#if (TEST == 0)fp1 func = &func1;for (int i = 0; i < 10; ++i) {std::cout << *(*(*func)(2))[i] << std::endl;}
#endif
#if (TEST == 1)fp2 func = &func3;(*(*func)(1,1,1.1))(1);
#endif
#if (TEST == 2)#endifreturn 0;
}