int (*func)(double) func is a pointer to function (double) returning int
int hoge [3][10] hoge is array of array of int hoge是int数组(有10个)的数组(有三个)
int *hoge[10] hoge is array(10) of pointer to int
int func(int) func is function(int) returning int
指向数组的指针
int array[3]:
int (*array_p)[3]
array是数组,array_p是指针,
&array取的“指向数组的指针”,所有可以 array_p=&array ,类型相同
“指向int的指针”和“指向int数组的指针”是两种完全不一样的类型,虽然array和&array指向同一地址,但是做指针运算的时候,结果不同
int main(int argc, char *argv[]) {
int array[3]={1,2,3};
int (*array_p)[3] = {4,5,6};
printf("%d\n",*(array+1));
printf("%d\n",*(&array+1));
return 0;
}
结果:
2
10485308
----------------------------------------------------------
array是指向int的指针,array+1只加4个字节
&array是指向int数组的指针,&array+1加4*3=12个字节
多维数组:
其实C中不存在多维数组,存在是的数组的数组。
int hoge[i][j] int hoge[2][3]
hoge[i] 是 int数组(个数为3)的数组(个数为2)中的第i个元素,所以hoge[i]可以理解为指向int的指针。
在数组做为参数传递的时候,一维数组 int array[3] ,因为在传递的时候,数组可以解释成指针,所以是指向int的指针, void function(int * array)
所以对于二维数组 int array_p[2][3],int 数组(个数3)的数组(个数2),将后面看成指针,所以是 指向 int数组(数组元素个数为3)的指针,所以是
void function(int (* array_p)[3]),也可以写成 void function(int array[2][3])or void function (int array[][3])
该文内容基本来源于《征服C指针》