int(*ptr)[3]=a,*p=a[0];与数组元素a[1][2]等价的是*((p+2)+3)怎么理解
int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};
p是一个一维数组。它的内容是1~12。也就是将a中的元素按行存入了p中了。*((p+2)+3)=*(p+5)就是p[5],而p[5]=6。a[1][2]=6,所以这两者是等价的。
已知: int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12}; int (*ptr)[3]=...
(ptr)[3]是行指针,*(ptr)[3]=a表示指向a[4][3]的第0行
已知:int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12},C语言问题
int (*ptr)[3]=a这句,将a的首地址赋值给了ptr,ptr表示的是指向一个含有三个Int的数组的指针,((ptr+1)[2])等价于*((ptr+1)+2),等价于*(ptr+3),这表示从数组a的首地址向后移动3个单位,每个单位为一个含有3个Int的数组,所以一共向后移动了9个单位,即得出运行结果10!要想正确表...
int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12} , (*prt)[3]=a, *p=a...
(*prt)[3]=a指的是(*prt)+3的这块指针指向2维数组a的首地址,prt应该是个2维指针。p=a[0]指的是大小为3的第二维数组的首地址。如果不对指针做加法运算的话,不用计较它真正指向几维数组,他们指向的都是a、a[0]、a[0][0]的地址。
int[4][3]={1,2,3,4,5,6,7,8,9,10,11,12}; int (*ptr)[3]=a;_百度知...
ptr 是指针,指向含3个元素的数组。int (*ptr)[3]=a; ptr 指向 a 始地址。int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12}; int (*ptr)[3]=a;int i;for (i=0;i<12;i++) printf("%d ", (*ptr)[i]); \/\/ 输出 1 2 3 4 5 6 7 8 9 10 11 12 printf...
...int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}},循环输出数组中...
for(int i=0;i<3;i++)for(int j = 0;j<4;j++)printf("%d",a[i][j]);
...int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}定义之后,元素a[1][0...
这个是2维数组,数组是从0开始的,即 a[0][0] a[0][1]...a[2][0]...a[2][3]所以a[1][0]是第5个数,即5,选b
...a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};则表达式&a[2]+3的...
12,&a[3]取到这个二维数组的{9,10,11,12}里面的9的地址,再后移3个,取到值12
...4][3]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};
如:int arr[4][3]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};int* p = arr[0];就是说*p从1开始,*p[1]就是a[0][1],*p[2]就是a[0][2],等等,知道*p[11]就是a[3][2]你说的那四个值一样,那是肯定的,都是计算机为这个二维数组分配内存的首地址,1,是给二级...
若有定义:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12},(*p)[4];p=a...
第3个元素,也就是a[2][3],*(p[2]+3)表示第2行,第3个元素的值。p+4表示第四行(从0行开始),因为a数组没有第四行,所以是错的。p[4]表示第四行(从0行开始),原因同上。p表示a数组第0行,第0列地址,**p表示a[0][0]的值,值不会再包含元素,所以(**p)[2]是错的。