c语言的问题谁知道原理
展开全部
这个问题比较复杂,涉及到OB操作,因此在不同的编译器上结果可能会不一样。编译器具体的处理步骤可以通过反汇编查看。初学者不建议研究这个问题,因为既难以理解又没有意义。
我以你用的VS为例简单说一下这个语句在VS上的处理过程。
首先有两个基本知识必须了解:1.函数参数压栈顺序是从右向左的;2.变量后的++号代表该行语句结束后变量再自加,变量前的++号代表先自加变量,然后执行该行语句。
接下来有一个非常重要的内容:VS处理函数参数时,如果编译器遇到i++,则将i当前值立即压栈;如果编译器遇到++i,则将i先自加1,然后将i的引用压栈;如果编译器遇到i,将i的引用压栈。当所有参数处理完毕后,再将栈中所有的引用替换为i的当前值。这一点直接决定了输出结果。
对于这样一个函数printf("%d %d %d %d %d",++i+(++i),i++,++i+(++i+100),++i,i++);,假设堆栈内的5个函数参数用数组s[5]表示,编译器的处理步骤是:
1.最后一个参数为i++,因此将i的当前值2立即压栈,得s[4]=2。然后将i自加1,得i=3;
2.倒数第二个参数为++i,先将i自加1变为4,然后将i的引用&i压栈,得s[3]=&i;
3.第三个参数为++i+(++i+100),由于括号优先级最高,先处理括号内的++i,将i自加1变为5,然后取i的引用和100相加,即&i+100;最后再处理括号外的++i,先将i加1变为6,然后将i的引用&i和&i+100相加,得&i+(&i+100)。将这个结果压栈,得s[2]=&i+(&i+100);
4.第二个参数为i++,将i的当前值6立即压栈,得s[1]=6,然后将i自加1,得i=7;
5.第一个参数为++i+(++i),处理方式同第三个参数,先处理后面的++i,将i自加1变为8,然后取引用&i;接着处理前面的++i,将i自加1变为9,然后取引用&i和后面的&i相加,得&i+&i。将这个结果压栈,得s[0]=&i+&i。
所有参数压栈完毕后,开始处理所有栈内的引用&i,将它们替换为i的当前值9。
s[0]=&i+&i=9+9=18
s[1]=6
s[2]=&i+(&i+100)=9+(9+100)=118
s[3]=&i=9
s[4]=2
最后将前面的字符串表达式"%d %d %d %d %d"压栈,然后call printf函数,输出栈s的5个元素,即18、6、118、9、2。
我以你用的VS为例简单说一下这个语句在VS上的处理过程。
首先有两个基本知识必须了解:1.函数参数压栈顺序是从右向左的;2.变量后的++号代表该行语句结束后变量再自加,变量前的++号代表先自加变量,然后执行该行语句。
接下来有一个非常重要的内容:VS处理函数参数时,如果编译器遇到i++,则将i当前值立即压栈;如果编译器遇到++i,则将i先自加1,然后将i的引用压栈;如果编译器遇到i,将i的引用压栈。当所有参数处理完毕后,再将栈中所有的引用替换为i的当前值。这一点直接决定了输出结果。
对于这样一个函数printf("%d %d %d %d %d",++i+(++i),i++,++i+(++i+100),++i,i++);,假设堆栈内的5个函数参数用数组s[5]表示,编译器的处理步骤是:
1.最后一个参数为i++,因此将i的当前值2立即压栈,得s[4]=2。然后将i自加1,得i=3;
2.倒数第二个参数为++i,先将i自加1变为4,然后将i的引用&i压栈,得s[3]=&i;
3.第三个参数为++i+(++i+100),由于括号优先级最高,先处理括号内的++i,将i自加1变为5,然后取i的引用和100相加,即&i+100;最后再处理括号外的++i,先将i加1变为6,然后将i的引用&i和&i+100相加,得&i+(&i+100)。将这个结果压栈,得s[2]=&i+(&i+100);
4.第二个参数为i++,将i的当前值6立即压栈,得s[1]=6,然后将i自加1,得i=7;
5.第一个参数为++i+(++i),处理方式同第三个参数,先处理后面的++i,将i自加1变为8,然后取引用&i;接着处理前面的++i,将i自加1变为9,然后取引用&i和后面的&i相加,得&i+&i。将这个结果压栈,得s[0]=&i+&i。
所有参数压栈完毕后,开始处理所有栈内的引用&i,将它们替换为i的当前值9。
s[0]=&i+&i=9+9=18
s[1]=6
s[2]=&i+(&i+100)=9+(9+100)=118
s[3]=&i=9
s[4]=2
最后将前面的字符串表达式"%d %d %d %d %d"压栈,然后call printf函数,输出栈s的5个元素,即18、6、118、9、2。
追问
很好虽然已今懂了还是多射你
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
单片机,即单片微控制器,也称为单片微型计算机,是将中央处理器(CPU)、存储器(ROM,RAM)、输入/输出接口和其他功能部件集成在一块 在一个小块的集成电路上,从而实现对整个电路或系统的数字式控制。单片机不是完成某一个逻辑功能的芯片,而是...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
2016-01-16
展开全部
你要知道什么原理
更多追问追答
追问
自已看图吖
追答
就是怎么显示成这样的?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询