//
// 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)
#endif
return 0;
}