若有定义语句:int x[5]={0, 1, 2, 3, 4}, *p;,则以下数值不为2的表达式是?

2024-12-03 17:21:29
推荐回答(2个)
回答1:

B 的表达式是 (p=x+2, *p++),按"后缀++" 规定,在表达式内 先用原值,出了表达式再自增1。所以 B 的表达式 可以写成: (p=x+2, *p)。
p=x+2 就是 p=&x[2],
*p 就等于 x[2], 等于 2.
C 的表达式是 (p=x+1, *(p++) ),  按后缀++规定,在表达式内 先用原值,出了表达式再自增1。所以 C 的表达式 可以写成: (p=x+1, *(p) ),   
p=x+1 就是 p=&x[1],
*(p) 就等于 x[1], 等于 1. 数值不为2的表达式 选 C

回答2:

p++的返回值是p原来的值,而不是增加后的值
B *p++ 返回*(x+2) x[2]=2
C *(p++) 虽然有括号先执行p++,p本身自增了,但返回值是x+1 ,*(x+1)=1