2010年12月19日星期日

指向数组的指针

举例: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};

没有评论:

发表评论