指向多维数组的指针

来源:互联网 发布:马其顿 知乎 编辑:程序博客网 时间:2024/06/05 19:07
#include <stdio.h>void main(){int buf[2][3] = { {1,2,3},{4,5,6} };int(*p)[3]; //定义了一个指针,指向int [3]这种数据类型。指针p即为指向二维数组的指针p = buf;//p指向了二维数组中的第0行//p++; //指向了第1行printf("%d\n", sizeof(p));//输出4,表明p是一个指针printf("%d,%d\n", p, p + 1);//输出14614236,14614248   12=3*4  位移了1 * sizeof(int [3]) =12printf("p+1=%d\n", p + 1);//输出第1行首地址printf("*(p + 1)=%d\n", *(p + 1));//输出第1行,第0列元素的地址printf("*(*(p + 1))=%d\n",*(*(p + 1)));//输出第1行第0列元素的值printf("*(p+1)+2=%d\n", *(p + 1) + 2);//输出第1行第2列元素的地址printf("*(*(p + 1)+1)=%d\n", *(*(p + 1)+2));//输出第1行第2列元素的值for(int i=0;i<2;i++)for (int j = 0;j < 3;j++){//printf("%d\n", p[i][j]);printf("%d\n", *(*(p + i) + j));//和上一句等同}}

运行结果:

4
15924692,15924704
p+1=15924704
*(p + 1)=15924704
*(*(p + 1))=4
*(p+1)+2=15924712
*(*(p + 1)+1)=6
1
2
3
4
5
6
请按任意键继续. . .


总结可以发现:对于一个指向二维数组的指针,只有出现两个*或者两个[]或者一个*和一个[]的情况下(没有出现&时)才是对应的二维数组中某一行某一列的元素的值,只出现一个或0个[]和*的情况)是表示的地址。


原创粉丝点击