C语言中printf 输出列表 读取的问题.

2024-12-14 12:18:42
推荐回答(5个)
回答1:

运算符 解释 结合方式 () [] -> . 括号(函数等),数组,两种结构成员访问 由左向右 ! ~ ++ -- + - * & (类型) sizeof
否定,按位否定,增量,减量,正负号, 间接,取地址,类型转换,求大小 由右向左 * / % 乘,除,取模 由左向右 + - 加,减 由左向右 << >> 左移,右移 由左向右 < <= >= > 小于,小于等于,大于等于,大于 由左向右 == != 等于,不等于 由左向右 & 按位与 由左向右 ^ 按位异或 由左向右 | 按位或 由左向右 && 逻辑与 由左向右 || 逻辑或 由左向右 ? : 条件 由右向左 = += -= *= /= &= ^= |= <<= >>= 各种赋值 由右向左 , 逗号(顺序) 由左向右
好好 看看这个你就明白了

回答2:

vs2010得到的是2 0

 

用c++测试了一下

#include 
class a
{
public:
a()
{
}
a & operator ++()
{
printf("++a\n");
return *this;
}
a const operator ++(int)
{
printf("a++\n");
return *this;
}
};
void main()
{
a p;
printf("",(++p),(p++));
}

发现输出a++ ++a

说明p++先被执行

也就是说从右向左执行。

首先p++ p变为1 返回原数值0

由于++p返回的是原数值的引用,所以p变为2 返回

结果为2 0

可能不同编译器结果不同吧。

不过1 0感觉比较奇怪。说明++p返回的是原数值,而不是引用。

回答3:

编译时,编译选项:不优化 /Od 得 1 0。
编译选项选优化 /O1 /O2 都得 2 0。
应避免这种程序写法。

回答4:

爱咋咋!!这个没有标准!!!

回答5:

答案是1 0 ,可能不同的编译器结果不同吧, ++p 是先进行++运算,而 p++ 是先用在++