您的位置:首页 > 编程语言 > C语言/C++

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: