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 再分别运算 还是从右往左读?还是从左往右读.? 展开
void main()
{
int p=0;
printf("%d %d",(++p),(p++));
}
我同学电脑编译后答案是 2 0 我电脑编译后运行是 1 0 而我觉得答案应该是 1 0
...郁闷了.到底应该怎么算.是先读取变量P 再分别运算 还是从右往左读?还是从左往右读.? 展开
5个回答
展开全部
运算符 解释 结合方式 () [] -> . 括号(函数等),数组,两种结构成员访问 由左向右 ! ~ ++ -- + - * & (类型) sizeof
否定,按位否定,增量,减量,正负号, 间接,取地址,类型转换,求大小 由右向左 * / % 乘,除,取模 由左向右 + - 加,减 由左向右 << >> 左移,右移 由左向右 < <= >= > 小于,小于等于,大于等于,大于 由左向右 == != 等于,不等于 由左向右 & 按位与 由左向右 ^ 按位异或 由左向右 | 按位或 由左向右 && 逻辑与 由左向右 || 逻辑或 由左向右 ? : 条件 由右向左 = += -= *= /= &= ^= |= <<= >>= 各种赋值 由右向左 , 逗号(顺序) 由左向右
好好 看看这个你就明白了
否定,按位否定,增量,减量,正负号, 间接,取地址,类型转换,求大小 由右向左 * / % 乘,除,取模 由左向右 + - 加,减 由左向右 << >> 左移,右移 由左向右 < <= >= > 小于,小于等于,大于等于,大于 由左向右 == != 等于,不等于 由左向右 & 按位与 由左向右 ^ 按位异或 由左向右 | 按位或 由左向右 && 逻辑与 由左向右 || 逻辑或 由左向右 ? : 条件 由右向左 = += -= *= /= &= ^= |= <<= >>= 各种赋值 由右向左 , 逗号(顺序) 由左向右
好好 看看这个你就明白了
追问
那您的意思是读取输出项的时候也是从右向左读取的? 我要提问的不是 ++P 和P++的关系. 是问输出的时候遇到占位符了,是一次性读取所有输出项,还是遇到一个读一个.
追答
一次性读完!互不影响的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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返回的是原数值,而不是引用。
更多追问追答
追问
编译器不通 输出项的读取顺序也不一样么?
追答
可能运行规则会有所不同吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
编译时,编译选项:不优化 /Od 得 1 0。
编译选项选优化 /O1 /O2 都得 2 0。
应避免这种程序写法。
编译选项选优化 /O1 /O2 都得 2 0。
应避免这种程序写法。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
爱咋咋!!这个没有标准!!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
答案是1 0 ,可能不同的编译器结果不同吧, ++p 是先进行++运算,而 p++ 是先用在++
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询