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

2025-03-18 11:01:57
推荐回答(4个)
回答1:

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]。

回答2:

a[0][2]

回答3:

对于二维数组,p=a是非法的,他们的基类型不同。

回答4:

两个问题:
1.输入k之后 ,要重新将 p 指向 a 即10行前+一句 p = a;
2.最后一个for越界,i=9 时 p+i+1 就成了 p+10