有int (*ptr)[3]=a,*p=a[0]。问怎样表示a[1][2]。a[1][2]应该是6,我的理解应该是*((ptr+1)[2])应该是可以表达的,但是程序运行后结果是10!然后*(*(a+1)+2),是可以表达的,这是为什么?明明取了地址a+1的值再加2怎么还能再当成指针取其地址的值?求解释!
int (*ptr)[3]=a这句,将a的首地址赋值给了ptr,ptr表示的是指向一个含有三个Int的数组的指针,
*((ptr+1)[2])等价于*((ptr+1)+2),等价于*(ptr+3),这表示从数组a的首地址向后移动3个单位,每个单位为一个含有3个Int的数组,所以一共向后移动了9个单位,即得出运行结果10!
要想正确表达a[1][2],应该是(*(ptr+1))[2],数组的运算符[ ]比间值运算符*的优先级高,(*(ptr+1))[2]表示a向后移动一个单位即三个Int,此时ptr指向4,再往后移动2个Int指向6。
其实遇到这类问题画内存结构图比较容易理解了
...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}; int (*ptr)[3]=...
(ptr)[3]是行指针,*(ptr)[3]=a表示指向a[4][3]的第0行
...int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}定义之后,元素a[1][0...
所以a[1][0]是第5个数,即5,选b
int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12},(*prt)[3]=a,*p[4],i...
嗯 为数组下标是从0开始的,所以不可能出现4 最后是a[3][2]1 2 3 4 5 6 7 8 9 10 11 12 对应的数组下标:a[0][0] a[0][1] a[0][2]a[1][0] a[1][1] a[1][2]a[2][0] a[2][1] a[2][2]a[3][0] a[3][1] a[3][2]...
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[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[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]的地址。
C语言a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}表示把里面的数字分成
main() {int a[5]={1,2,3,4,5},b[4]={6,7,8,9},*p=a,*q=b\/\/p指向a的首地址,即1,q指向b,即6 p+=2;q+=3;\/\/p地址后移2位,指向3,q同理指向9 *p=*(q)+3;\/\/赋值语句,将q指向的内容加3赋给p,则p指向的值3变成12,q依旧为9 q--;\/\/q地址前移1位...
...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},(*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]是错的。