C语言中++i代表自加1,为什么如下图程序中(++p)->a得5?然后我把(++p)->a中删掉一个+,变成了(+p)->a,结果就是3了(如下图).但是+不是双目运算符么?真正的原因是:printf这个函数的执

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/05 19:40:42
C语言中++i代表自加1,为什么如下图程序中(++p)->a得5?然后我把(++p)->a中删掉一个+,变成了(+p)->a,结果就是3了(如下图).但是+不是双目运算符么?真正的原因是:printf这个函数的执

C语言中++i代表自加1,为什么如下图程序中(++p)->a得5?然后我把(++p)->a中删掉一个+,变成了(+p)->a,结果就是3了(如下图).但是+不是双目运算符么?真正的原因是:printf这个函数的执
C语言中++i代表自加1,为什么如下图程序中(++p)->a得5?

然后我把(++p)->a中删掉一个+,变成了(+p)->a,结果就是3了(如下图).但是+不是双目运算符么?

真正的原因是:
printf这个函数的执行顺序是从右往左的
也就是说先输出(p++)->s此时p加了一次1
在输出(++p)->s此时又加了一次1


我是自己试出来的,实验程序如下:







至于我后来说的(+p)->a这个,(+p)中的+根本就没参加运算.

C语言中++i代表自加1,为什么如下图程序中(++p)->a得5?然后我把(++p)->a中删掉一个+,变成了(+p)->a,结果就是3了(如下图).但是+不是双目运算符么?真正的原因是:printf这个函数的执
指针加减是对指针所指的大小而言的,这里指针加一实际上是对这个结构体的长度加一.那么就移动了两个int长度,指向了s(2)