分享一个c语言知识
问题
int a=023;
printf(“%d\n”,--a,a--);
解答
这个也是百度的,主要是记录一下这个冷门知识
a = 023是八进制,即十进制19。printf(“%d\n”,–a,a–)的控制符却是要求用十进制输出的
即要把023换算成十进制再经–运算最后输出。printf(“%d\n”,–a,a–)是从右向左来计度算要输出的变量列表的,本题中先计算a–,再计算–a:
printf(“%d\n”,–a,a–)的格式控制符只有一个%d,就是说后面的输出变量表中的两个变量只道输出1个值;
那么,输出哪一个呢?是–a还是a–呢?答案是–a,输出17.因为虽然printf函数的变量表是从右至左计算的,但输内出时却是从最左端对应输出的,就是说一个%d对应–a而不是a–。本题若把printf(“%d\n”,–a,a–)改为printf(“%d%d\n”,–a,a–),那就会输出17 19,或许还与编译器有关,因为C/C++的编译器太多。
emmm 确定是18而不是17吗?
我记得后缀–修改原值,但返回临时变量,前缀–修改原值并返回
应该是17