运行以下程序段,第1行输出3
,第2行输出5,4; 对吗?希望大家帮助!
struct {
int a; int *b;
} s[4], *p;
int i, n = 1;
for(i = 0; i < 4; i++){
s[i].a = n;
s[i].b = &s[i].a;
n = n + 2;
}
p = &s[0];
printf("%d\n", ++*p->b);
p++;
printf("%d,%d\n", (++p)->a, (p++)->a); /* 输出数据之间没有空格分隔;按从右向左的顺序求解表达式 */
该回答引用ChatGPT
不对。
第1行的输出结果是4,而不是3。
p = &s[0]; 表示把 p 指向数组 s 的第1个元素。
++p->b 中,p->b 表示指向数组元素 a 的指针,p->b 表示指向的数组元素的值,最终 ++*p->b 表示对指向的数组元素的值进行递增,即先将 s[0].a 的值加1,再返回结果。
第2行的输出结果是6,5。
在第2行的表达式中,++p 先对 p 进行递增,使其指向数组 s 的第2个元素,再返回结果。因此,(++p)->a 的结果为 s[1].a 加1后的值,即6。
接下来,(p++)->a 对 p 进行递增,使其指向数组 s 的第3个元素,但是递增操作对表达式结果不会产生影响,即不会对 s[2].a 的值进行递增。因此,(p++)->a 的结果为 s[1].a 的值,即5。
最终的输出结果为:
4
6,5