在c中,int (*p)[4],里的p到底是什么东西。
p这个变量中存着指针的指针吗?
((p+i)+j)
p是一个int的指针。
*(*(p+i)+j)
相当于 *(p[i] + j)
这里p[i] + j)作为另一个指针
p就是数组的首地址,即第一个元素的地址
返回类型为int的指针,而这个指针指向的是一个有四个int类型的数组的首地址
数组指针 与 指针数组 是一对容易混淆的概念。
数组指针,例如: int (*p)[n];
为了好理解,我将它称为: 数组型的指针。
如果说是 int 型的指针,则 p++ 时 p 的地址增加 4;数组型的 p,执行 p++,则 p 的地址增加 n * 4。
例如:
int a[3][4];
int (*p)[4]; // 该语句是定义一个数组指针,指向含4个元素的一维数组
p = a; // 将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]
p++; // 该语句执行过后,也就是 p = p + 1; p 跨过行 a[0][] 指向了行 a[1][]
指针数组,例如: int *p[n];
为了好理解,我将它称为: 指针型的数组。
如果说是 int 型的数组,则数组的每个元素都是 int 型;这个也一样,其每个元素都是指针。
上面说到:”p = a; // 将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]“
可是我不是很理解:*(*(p+i)+j) 为什么可以指向元素。
因为,*(p+i) 就是将一个横指针展开了,**这时他是指向i横的第一个元素呢?还是指向了又一个指针 ?
我之所以会有后者的想法是因为,*(*(p+i)+j) 这条式子前面又多了一个星号,这说明了*(p+i)也是一个指针数据.也就是说p是指针的指针.
如果后者对的话,那就和你那句话冲突了。
我的分析对吗??请高手指教.