1. 你第一步分析没错,y*=2*y+1 这个表达式的值,就是y*=这个赋值的结果10 。
所以y+=y*=2*y+1相当于y+=10,注意这个时候y已经是10了,所以结果是20
2. p是指向长度为2的数组的指针,赋值p=a以后,p和a就是等效的了。现在拿a来讨论
a+2相当于&a[2],**(a+2)相当于**(&a[2])即*a[2]即a[2][0],现在知道答案了吧
(1)>>>>>y+=y*(2*y+1)>>>>>y+=10>>>>y=12
(2)指针存的是地址而不是数组吧
1. 连等式是先计算右边的.
y+=y*=2*y+1 //y=2
y+=(y*=5) [y*=5之后,y=10]
y+=10
y=20
2. p是怎么定义的呀, 初值呢?
y+=y*=2*y+1
y+=(y*=2*y+1);
1.y=y*(2*y+1)=10;
2.y=y+y=20
2.int (*p)[2]<==>int p[][2];
int a[3][2] <==> int a[6];int *p=(int *)a; p[i] <==>a[i/2][i%2];
都是基础问题。
1·等号算式是右优先的,也就是先 y*=2*y+1= 10;后y+=y =20
2·对于a来说,是多维数组,但地址存储里面就是占有6个int的顺序空间,所以指针p赋值得到就是一个地址,+2就是地址空间+2,和a是几维的没什么关系。
1.每条表达式运算完后都会返回一个变量,如y*=2*y+1运算完后返回y,之后在参加其他运算y+=y,这条表达式运算完也返回y变量
2一一对应,**(a+2)相当于a[2][0]