int (*func)(int *p)
这个就不解释了,每本C语言参考书上都会有的。作为一个C/C++程序员还不会的话,说明你已经out了~~_~~
int (*func)(int *p, int (*f)(int*))
func是一个指针,指向一个函数,函数接收两个参数,第一个参数是int *,第二个参数是一个函数指针(该函数指针接收int *参数,返回int值),函数返回int值。使用typedef来简化一下:
- int (*func)(int *p, int (*f)(int*));
- /* 等价于 */
- typedef int (*functor1)(int *);
- typedef int (*functor2)(int *, functor1);
- functor2 func;
int (*func[5])(int *p)
func是一个包含5个元素的数组,数组中的每个元素是函数指针,函数接收int *参数,并返回int值。用typedef来简化一下:
- int (*func[5])(int *p);
- /* 等价于 */
- typedef (*functor)(int *);
- functor func[5];
int (*(*func)[5])(int *p))
func是一个指针,指针指向包含5个元素的数组,数组是的每个元素是函数指针,该函数接收int *参数,并返回int值。用下面的代码来表示一下func是个什么东东:
- int (*(*func)[5])(int *p);
- /* func是下面这个东东: */
- typedef int (*functor)(int *);
- functor arr[5];
- func = &arr;
int (*(*func)(int *p))[5]
func是一个指针,指针指向函数,函数接收int *参数,返回指针,指针指向包含5个元素的int型数组。用typedef来简化一下:
- int (*(*func)(int *p))[5];
- /* 等价于 */
- typedef int arr[5];
- typedef arr *(*functor)(int *);
- functor func;
int (*(*func)[5][6])[7][8]
func是一个指针,指针指向行数为5, 列数为6的二维数组,数组中保存的是指针,指针指向行数为7,列数为8的int型数组。下面的代码也许会让你更清楚一点:
- int (*(*func)[5][6])[7][8];
- /* see it: */
- typedef int arr[7][8];
- arr *func1[5][6];
- func = &func1;
int (*(*(*func)(int *))[5])(int *)
func是一个函数指针,函数接收int *参数,返回一个指针,指针指向包括5个元素的数组,数组中的元素是函数指针,函数接收int *参数,返回int值。用typedef简化一下下:
- int (*(*(*func)(int *))[5])(int *);
- /* 等价于 */
- typedef int (*functor1)(int *);
- typedef functor1 arr[5];
- typedef arr *(*functor2)(int *);
- functor2 func;
int (*(*func[7][8][9])(int*))[5]
func是一个三个数组,数组中的每个元素是指针,指针指向函数,函数指向int*参数,返回指几包含5个元素的int数组(嗷口),和typedef来简化一下:
- int (*(*func[7][8][9])(int*))[5];
- /* 等价于 */
- typedef int arr[5];
- typedef arr *(*functor)(int *);
- functor func[7][8][9];
i)int *p[3];
(ii)int (*q)[3];
(iii)int *(t[3]);
以上三者的区别?(vc++环境下验证):
(1)p是一个指针数组,此处包含三个整型指针,所以sizeof(p)=12;sizeof(*p)=4;//首地址
(2)q是一个数组指针,指向含有三个元素的整型数组,所以sizeof(q)=4;sizeof(*q)=12;
(3) 和(1)一样;sizeof(t)=12;sizeof(*t)=4;
(4) int *p[3]等价于:typedef int* myint;
myint p[3];
int (*p)[3]等价于:typedef int intarray[3];
intarray *p;
(5) (i)可以这样初试化:int a[]={1,2,3,4};
p[0]=a;//*p=a;
(ii)可以这样初始化:int a[3]={1,2,3};//数组元素必须是三个
q =&a;
(6)p是数组,不可做++操作,q是指针,可以做++操作,q++是当前q指向的地址值加12;