两个问题,关于C++的表达式与数组指针

1。int y=2;表达式y+=y*=2*y+1的值是?我的想法是①y=y*(2*y+1)=2*(2*2+1)=10;②y=y+(2*y+1)=10+(2*10+1)=31;这么算哪里出错了?2.设有变量定义int a[3][2]={1,2,3,4,5,6},(*p)[2]=a;表达式**(p+2)的值是?这里的函数指针p不是指向长度为2的数组么,但是a的第一维长度为3啊,到底多维数组的指向是怎么用的?请高人实例解答下,答得好还有20分送上~
2026年09月24日 21:12
有6个网友回答
网友(1):

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],现在知道答案了吧

网友(2):

(1)>>>>>y+=y*(2*y+1)>>>>>y+=10>>>>y=12
(2)指针存的是地址而不是数组吧

网友(3):

1. 连等式是先计算右边的.
y+=y*=2*y+1 //y=2
y+=(y*=5) [y*=5之后,y=10]
y+=10
y=20
2. p是怎么定义的呀, 初值呢?

网友(4):

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];

网友(5):

都是基础问题。
1·等号算式是右优先的,也就是先 y*=2*y+1= 10;后y+=y =20
2·对于a来说,是多维数组,但地址存储里面就是占有6个int的顺序空间,所以指针p赋值得到就是一个地址,+2就是地址空间+2,和a是几维的没什么关系。

网友(6):

1.每条表达式运算完后都会返回一个变量,如y*=2*y+1运算完后返回y,之后在参加其他运算y+=y,这条表达式运算完也返回y变量
2一一对应,**(a+2)相当于a[2][0]