现在遇到一个很复杂的声明,有变量名,*,[]
1.变量名和[]紧贴,没有被小括号隔开,则实质上是个数组。把变量名+[]一起摘出来就知道这个数组里都是什么类型的数据了
int *arr[5];//数组 抽出arr[5] 数组元素都是int *
int **arr[5]//数组 抽出arr[5] 数组元素都是int **
void (*arr[5]) (int*, int**);//数组 抽出arr[5] 数组元素都是void (*)(int* int**),数组元素都是函数指针,该函数原型:void func_name(int* int**)
const double * (*arr[5]) (const double*, int);//数组 抽出arr[5] 数组元素都是const double * (*) (const double*, int),数组元素都是函数指针,该函数原型:const double * func_name (const double*, int)
2.变量名和*在一个小括号里紧贴,变量名与[]被小括号隔开。 则实质上是个指针。把(*变量名)摘出来,就知道这个指针指向什么元素了
int number[5]={1,2,3,4,5};
int (*p)[5] = &number;/指针 抽出(*p), 剩下int [5]。即指向一个5整形的数组
int (**w)[5]= &p; //指针 抽出(**w), 指向int [5]。即w指向一个指针p,指针p指向一个5整形的数组