C/C++函数参数读取顺序
2016-09-04 21:45
267 查看
#include <iostream> #include <stdio.h> using namespace std; int main() { int a = 10; printf("a:%d %d %d %d\n", a++, ++a, a, a++); int b = 10; printf("b:%d %d %d\n", b++, ++b, b); int c = 10; printf("c:%d %d %d %d\n", c++, ++c, c, ++c); }
View Code
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++函数参数读取顺序2
- C/C++函数参数读取顺序
- C/C++函数参数读取顺序
- C/C++函数参数读取顺序
- C++函数参数读取顺序
- C/C++函数参数读取顺序
- [C/C++]函数参数的入栈顺序与可变参数的实现
- [C/C++]函数参数的入栈顺序与可变参数的实现
- [C/C++]函数参数的入栈顺序与可变参数的实现
- 编程经验点滴(二)——《C、C++中函数调用时参数压栈的顺序问题》
- C/C++函数参数的入栈顺序,计算顺序和可变参数的实现
- C/C++函数参数的入栈顺序,计算顺序和可变参数的实现
- [C/C++]函数参数的入栈顺序与可变…
- c/c++的函数参数压栈顺序
- c/c++的函数参数压栈顺序
- C++函数参数的入栈顺序
- C C++ Intro - C语言中函数参数入栈的顺序
- c/c++的函数参数压栈顺序
- c/c++的函数参数压栈顺序
- 4-8-实参与形参、函数声明与定义、函数读取顺序、可变参数的函数、函数生存周期