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

#include<stdio.h>voidmain(){intp=0;printf("%d%d",(++p),(p++));}我同学电脑编译后答案是20我电脑编译后运行是... #include <stdio.h>
void main()
{
int p=0;
printf("%d %d",(++p),(p++));
}

我同学电脑编译后答案是 2 0 我电脑编译后运行是 1 0 而我觉得答案应该是 1 0

...郁闷了.到底应该怎么算.是先读取变量P 再分别运算 还是从右往左读?还是从左往右读.?
展开
 我来答
舒服佳shoping
2013-05-07
知道答主
回答量:58
采纳率:0%
帮助的人:9.8万
展开全部
运算符 解释 结合方式 () [] -> . 括号(函数等),数组,两种结构成员访问 由左向右 ! ~ ++ -- + - * & (类型) sizeof
否定,按位否定,增量,减量,正负号, 间接,取地址,类型转换,求大小 由右向左 * / % 乘,除,取模 由左向右 + - 加,减 由左向右 << >> 左移,右移 由左向右 < <= >= > 小于,小于等于,大于等于,大于 由左向右 == != 等于,不等于 由左向右 & 按位与 由左向右 ^ 按位异或 由左向右 | 按位或 由左向右 && 逻辑与 由左向右 || 逻辑或 由左向右 ? : 条件 由右向左 = += -= *= /= &= ^= |= <<= >>= 各种赋值 由右向左 , 逗号(顺序) 由左向右
好好 看看这个你就明白了
追问
那您的意思是读取输出项的时候也是从右向左读取的? 我要提问的不是 ++P 和P++的关系. 是问输出的时候遇到占位符了,是一次性读取所有输出项,还是遇到一个读一个.
追答
一次性读完!互不影响的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cwnsjl
2013-05-07 · 超过15用户采纳过TA的回答
知道答主
回答量:35
采纳率:0%
帮助的人:40.5万
展开全部

vs2010得到的是2 0

 

用c++测试了一下

#include <stdio.h>
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返回的是原数值,而不是引用。

更多追问追答
追问
编译器不通 输出项的读取顺序也不一样么?
追答
可能运行规则会有所不同吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
金色潜鸟
2013-05-07 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5708万
展开全部
编译时,编译选项:不优化 /Od 得 1 0。
编译选项选优化 /O1 /O2 都得 2 0。
应避免这种程序写法。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
_whales
2013-05-08 · TA获得超过2279个赞
知道大有可为答主
回答量:1814
采纳率:85%
帮助的人:507万
展开全部
爱咋咋!!这个没有标准!!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
咸淡丶超人
2013-05-07 · TA获得超过484个赞
知道答主
回答量:187
采纳率:0%
帮助的人:214万
展开全部
答案是1 0 ,可能不同的编译器结果不同吧, ++p 是先进行++运算,而 p++ 是先用在++
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式