问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言的前置和后置运算符的区别?!20

发布网友 发布时间:2023-09-12 08:16

我来回答

4个回答

热心网友 时间:2024-11-30 13:40

C语言的前置和后置运算符的区别为:执行顺序不同、当前值不同、侧重点不同。

一、执行顺序不同

1、前置运算符:前置运算符的执行顺序为先取变量的地址,运算它的内容,然后把值放到寄存器中。

2、后置运算符:后置运算符的执行顺序为先取变量的地址,把它的值装入寄存器中,在运算它内存中的内容。

二、当前值不同

1、前置运算符:前置运算符的当前值为变量值经过运算它后的内容。

2、后置运算符:后置运算符的当前值为变量值的内容。

三、侧重点不同

1、前置运算符:前置运算符的侧重点为先算后用。

2、后置运算符:后置运算符的侧重点为先用后算。

热心网友 时间:2024-11-30 13:40

前置运算符与后置运算符的区别主要在于执行顺序上。


下面通过举例来具体说明两者之间的区别:

int i=0;
if(i++>0)  // 后置运算符
    printf("HelloWorld");
// 程序执行完后,i的值变为1,但是不会输出HelloWorld,因为是后置运算符,所以上面的程序等价于下面的程序段:
int i=0;
if(i>0)  // 由于i=0,因此不执行{}中的语句
{  
    i=i+1;
    printf("HelloWorld");
}


int i=0;
if(++i>0)  // 前置运算符
    printf("HelloWorld");
// 程序执行完后,i的值变为1,而且输出HelloWorld。该程序段等价于如下程序段:
int i=0;
i = i + 1;
if(i>0)  // 由于i=1,所以会执行printf语句
    printf("HelloWorld");

热心网友 时间:2024-11-30 13:41

看完也许对你有帮助
我的计算机编译这两个程序的汇编代码
程序1:#include <stdio.h>
void main(){
int x=10;
printf("%d,%d\n",--x,--x);
}
代码1:int x=10;
0040D728 mov dword ptr [ebp-4],0Ah
4: printf("%d,%d\n",--x,--x);
0040D72F mov eax,dword ptr [ebp-4]
0040D732 sub eax,1//注意这儿
0040D735 mov dword ptr [ebp-4],eax
0040D738 mov ecx,dword ptr [ebp-4]
0040D73B push ecx//这儿 压栈
0040D73C mov edx,dword ptr [ebp-4]
0040D73F sub edx,1 //这儿
0040D742 mov dword ptr [ebp-4],edx
0040D745 mov eax,dword ptr [ebp-4]
0040D748 push eax//这儿
0040D749 push offset string "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n" (00422fa4)//字符确定
0040D74E call printf (00401080)//调输出
输出结果:8,9

程序2:#include <stdio.h>
void main(){
int x=10;
printf("%d,%d\n",x--,--x);
}
代码2:int x=10;
0040D728 mov dword ptr [ebp-4],0Ah
4: printf("%d,%d\n",x--,--x);
0040D72F mov eax,dword ptr [ebp-4]
0040D732 sub eax,1//这儿
0040D735 mov dword ptr [ebp-4],eax
0040D738 mov ecx,dword ptr [ebp-4]
0040D73B push ecx//压
0040D73C mov edx,dword ptr [ebp-4]
0040D73F mov dword ptr [ebp-8],edx
0040D742 mov eax,dword ptr [ebp-8]
0040D745 push eax//这儿 并没有先自减
0040D746 push offset string "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n" (00422fa4)//字符确定
0040D74B mov ecx,dword ptr [ebp-4]
0040D74E sub ecx,1//这儿才减
0040D751 mov dword ptr [ebp-4],ecx
0040D754 call printf (00401080)//打印
输出结果 9,9

再看你这道题 经过上面分析程序执行完后 x=0;
printf是从右往左的执行代码的
所以先压x-- x-- x--3个10然后--x=9 --x=8 --x=7 --x=6 --x=5 --x=4 x--=4
输出有个出栈 所以从后压栈的先输出
现在知道 如果第一个改为--x 必定第一个输出为3 后面不变
明白了没?

热心网友 时间:2024-11-30 13:41

有的printf是从右向左读取,有的是从左向右,你的这个例子不好,
至于前置和后置(以+说明):前置为在X的地址已经+1了然后看看有没有要和其他的数据运算的;而后置是在一个临时地址+1,用地址中没+1的值先去看看是否有和其他的数据运算,运算后X地址中的值才接收临时地址的+1值
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
ipad输入键盘变小了 金黄色的鱼肉 这是鲶鱼吗?为啥有八根胡子。能吃不?味道咋样。。。 可塑橡皮有毒害吗可塑橡皮有没有毒害 小米手机应用锁密码忘了怎么解除还不想恢复出厂模式 欢乐斗地主得到的包箱里开的那个宝宝去那里领 混凝土外加剂的使用方法 混凝土外加剂使用注意事项 为什么观众喜欢在直播间买东西? 梦见别人开口向我借钱 更换发动机发动机号会变吗 求助!家里发现五六只这样的虫子,特别小,大小比一个大米粒大一... 东京大学和香港大学,香港中文大学比较,哪个学校最强?17 留学香港大学跟东京大学哪个更好?1 留学香港大学跟东京大学哪个更好?2 鲁迅《风筝》题目的意义,急急急!65 《非自然死亡》里有哪些戳到你泪点的情节?2 《非自然死亡》有人看的么2 10万元左右手动挡最好的是哪一款汽车?14 有哪些类似于《非自然死亡》题材的日剧推荐?85 我原来是双系统,分别装在两块硬盘里,重装WIN7后进不了XP... C语言中有自增运算++、自减运算--,并且可以前置和后置。 ... 在c语言中,自加自减中,前置自加与后置自加有什么区别,并且后...12 ABAP内表的表头有什么功能13 abap内表里添加数据1 谁提供以下沈阳约会一条龙路线? 不胜感激 想买一台surface的笔记本,不知道Laptop2和boo... 文章以风筝为题包含了两层含义请谈谈你的理解1 已经备份了系统,怎样在BLOS中进行重装系统,请指教~~不胜... C语言中++前置 后置1 ABAP如何实现涉及两个以上表连接的分类统计,主要是COUN...4 在电脑中有时会出现图中所示的提示,是什么意思啊,具体该怎么解... 如何把握好经营好婚姻和爱情呢? 会计新人,求帐务处理流程,把凭证做完了该做什么?具体怎么做?...3 交通方式.用英语怎么说3 abap 如何锁表9 我现在一家事业单位工作有存款3.5万元,年收入大概5万元左右... 家里出现这个虫子 叫什么名字 米粒大小?1 感觉同龄人都成熟了可我还是很单纯怎么办 买了一辆手动挡的新车,在磨合期需要注意那些事项?179 请高手指教下.哪些进程可以去掉.或电脑有什么问题.不胜感激. 买手动挡汽车,买什么牌子的好?552 风筝 (王安忆) 文章以风筝为题 有哪些作用?从内容和结构两...2 英语中交通方式表达in和on的用法5 现在还买手动挡的图什么?看看这三款车就知道了 香港大学 东京大学 清华 北大实力排名?30 abap 建立数据表后,想创建数据元素后出现问题。1 家里有许多这个虫子,大概有半个大米粒那么大。请问是什么虫子? 家里地板出现了一种小虫子,差不多有两颗米粒大,爬起来特别慢,...1 关于C语言的++前置后置的问题3 最近家里出现米粒大小的黑色虫子,会飞会假死,还会爬墙,有哪位...