作业帮 > 综合 > 作业

c语言中,如果是二维或多维数组用指针加减运算,那算哪个?如 int a[5][5],*pa; pa=a;pa+2;那结果

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/13 10:13:15
c语言中,如果是二维或多维数组用指针加减运算,那算哪个?如 int a[5][5],*pa; pa=a;pa+2;那结果是指向a[
pa指向a,pa指向a开头的int型数,pa指向a[0][0],数组采用行优先存储,所以(pa+2)指向a[0][2].
注意区分下列:
int (*p)[5],数组指针,将二维数组看成数组的数组,p指向数组的某一行.
int *p,指向数组中的某个元素.
int**p,指向指针的指针.
int *p[5],指针数组.
当然楼上说的也有一定道理,但不同的编译器对于这个问题的处理是不一样,我用的gcc,直接打印警告,可以通过编译.如果想消除警告,建议采用强制类型转换.如:
pa=(int*)a,
或:pa=(int*)&a[0].