我试着执行以下代码,
int val=10;
printf("%d",++val++);
Run Code Online (Sandbox Code Playgroud)
正如所料,我收到以下错误消息," lvalue required as increment operand".但是,当我做出以下更改时,程序运行正常.
int val=10;
int *ptr=&val;
printf("%d",++*ptr++);
Run Code Online (Sandbox Code Playgroud)
该计划的产出为11.输出值并不令人惊讶.
但整个构造++*ptr++是一个lvalue而不是一个rvalue混乱.
我打印了ptr之前和之后的内容如下,
printf("%u\n",ptr);
printf("%d",++*ptr++);
printf("\n%d\n",ptr);
Run Code Online (Sandbox Code Playgroud)
2293532和2293536是在屏幕上打印的地址.所以显然ptr已经增加并且涉及指针添加.
输出有意义除了这样的事实*ptr检索其地址被存储在可变的含量ptr是10和++*ptr它递增到11.这绝对是一个rvalue.但是后期增量(++)已经被ptr我相信了.为什么这样?在C中管理此类绑定的规则是什么?