举例:int (*p)[10];
注意和int *p[10];的区别是后者是一个有10个元素的数组 用来存放int类型的指针(int*)。
用法举例:
int a[2][2] = {{1,2},{3,4}};
int (*p)[2] = a;
printf("%d\n", p[1][0]);
结果是3
如果将第二行的int (*p)[2] 改为 intint (*p)[3], 则会出现编译错误 “ cannot convert from 'int [2][2]' to 'int (*)[3]'。所以一般指针维数需要和数组对应,但是可以做指针强制转换:
int a[2][2] = {{1,2},{3,4}};
int (*p)[3] = (int (*)[3])a;
printf("%d\n", p[1][0]);
结果是4
以上定义的是一个二维数组指针, n维数组指针都可以按 (*p)[a1][a2]...[a(n-1)]定义。
P.S.
多维数组初始化可以用一个一维数组初始化,如上面的初始化用下面这句也可以:
int a[2][2] = {1,2,3,4};
没有评论:
发表评论