C/C++函数参数读取顺序
#include <iostream>
#include <stdio.h>
using namespace std;
void B(int a, int b){
cout << a << " " << b << endl;
}
void A(){
;
B(++i, i++);
printf("%d\n", i);
}
int main() {
A();
}
2,0
依据编译器不同结果不同!
#include <iostream>
#include <stdio.h>
using namespace std;
int main() {
;
printf("a:%d %d %d %d\n", a++, ++a, a, a++);
;
printf("b:%d %d %d\n", b++, ++b, b);
;
printf("c:%d %d %d %d\n", c++, ++c, c, ++c);
}
1. 在将参数入栈前,编译器会先把参数的的表达式都处理掉,哪怕这些运算会改变其中某些参数的值,
2.对于a++操作,编译器会开辟一个缓冲区来保存当前a的值,然后再对a操作,取值时是从缓冲区取,而不是直接从a的内存地址里取。
通过查看汇编代码,我们发现在参数入栈时顺序的确是从右向左入栈,但是在入栈前先把参数列表里的表达式算一遍得到表达式的结果,最后再把这些运算结果统一入栈,这就解释了为什么第三个参数a会输出12,因为执行完a, ++a, a++后a = 12。那为什么第一项++a会输出11呢,这就要看C++中的++运算符的实现机制了,通过上面的汇编代码,可以看到:
a:12 13 13 10
b:11 12 12
c:12 13 13 13
C/C++函数参数读取顺序的更多相关文章
- C/C++函数参数读取顺序2
#include <stdio.h>int main(){ int a=1,b=3,c=3; printf("%d, %d, %d",(a++,b++,c++),b,c ...
- c/c++的函数参数压栈顺序
整理日:2015年3月18日 为了这句话丢了很多次人.无所谓了,反正咱脸皮厚. 总结一下 编译出来的c/c++程序的参数压栈顺序只和编译器相关! 下面列举了一些常见的编译器的调用约定 VC6 调用约定 ...
- PowerShell控制台输出符号+函数参数类型指定+文本内容读取
There are several ways: Write-Host: Write directly to the console, not included in function/cmdlet o ...
- C语言函数参数压栈顺序为何是从右到左?(从左向右的话,碰到printf的会陷入死循环)
上学期学习了汇编语言,并在操作系统实验中使用了汇编+C语言混合编程,中间也了解了一些C语言与汇编语言的对应关系. 由于汇编语言是底层的编程语言,各种函数参数都要直接控制栈进行存取,在混合编程中,要用汇 ...
- 函数调用过程中,函数参数的入栈顺序,why?
C语言函数参数入栈顺序为从右至左.具体原因为:C方式参数入栈顺序(从右至左)的好处就是可以动态变化参数个数.通过栈堆分析可知,自左向右的入栈方式,最前面的参数被压在栈底.除非知道参数个数,否则是无法通 ...
- c语言中函数参数入栈的顺序是什么?为什么
看到面试题C语言中函数参数的入栈顺序如何? 自己不知道,边上网找资料.下面是详细解释 #include <stdio.h> void foo(int x, int y, int z){ ...
- python函数参数类型及其顺序
根据inspect模块官文文档中关于函数参数类型的相关说明,python函数参数共有五种类型,按顺序分别为:POSITIONAL_ONLY.POSITIONAL_OR_KEYWORD.VAR_POSI ...
- agruments应用——求出函数参数的总合&&css函数——设置/读取对象的属性&&当前输入框高亮显
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- python学习笔记3.1_数据读取常用函数参数
一.read_table/read_csv常用函数参数 1.path:表明文件系统位置的字符串.url或文件型对象 2.sep或delimiter:用于分隔每行字段的字符序列或正则表达式 3.head ...
随机推荐
- sql注入实例分析
什么是SQL注入攻击?引用百度百科的解释: sql注入_百度百科: 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具 ...
- 嵌入式实时操作系统μCOS原理与实践任务控制与时间的解析
/*************************************************************************************************** ...
- 伪分布模式下执行wordcount实例时报错解决办法
问题1.不能分配内存,错误提示如下: FAILEDjava.lang.RuntimeException: Error while running command to get file permiss ...
- <span>和<a>的margin上下和padding上下不起作用的原因和解决
使用到了<span>和<a>标签,发现在样式里面直接写margin-top.margin-bottom和padding-top.padding-bottom都不起作用,页面样式 ...
- Developing a plugin framework in ASP.NET MVC with medium trust
http://shazwazza.com/post/Developing-a-plugin-framework-in-ASPNET-with-medium-trust.aspx January 7, ...
- Egret命令行小结
1. build 构建指定项目,编译指定项目的TypeScript文件2. create 创建新项目3. create_app 从h5游戏生成app4. create_mainfest 在工程目录下生 ...
- AppSettingManager
public class AppSettingManager { public static bool Update(string key, string value) { try { var con ...
- 一个简单的javascript深拷贝
var extendDeep = function(parent,child){ var i, toStr = Object.prototype.toString, astr = '[object A ...
- 在Windows的Tomcat环境下部署Solr 4.7.0
主要步骤如下: 1.下载solr-4.7.0.tgz; 2.解压缩solr-4.7.0.tgz,解压后目录结构如下: 3.将example/webapps目录下的solr.war复制到tomcat的w ...
- Apache prefork 模块指令分析
问题背景: 在一台只有内存的vps上安装directadmin之后经常内存耗,经过查看之后发现Apache成了罪魁祸首急速消耗内存SWAP剩余空间都是0,最终导致内核开始大下杀手,把MySQL都杀了, ...