指向多维数组的指针

xiaoxiao2021-02-28  90

#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]) =12 printf("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个[]和*的情况)是表示的地址。

转载请注明原文地址: https://www.6miu.com/read-51950.html

最新回复(0)