首页 > 代码库 > C/C++函数参数读取顺序

C/C++函数参数读取顺序

技术分享
 1 #include <iostream> 2 #include <stdio.h> 3 using namespace std; 4 void B(int a, int b){ 5     cout << a << " " << b << endl; 6 } 7 void A(){ 8     int i=0; 9     B(++i, i++);10     printf("%d\n", i);11 }12 int main() {13     A();14 }
View Code

2,0

技术分享
1 #include <cstdio>2 3 int main() {4     int a = 10;5     printf("%d %d %d\n", a++, ++a, a);6     return 0;7 }
View Code

 

1. 在将参数入栈前,编译器会先把参数的的表达式都处理掉,哪怕这些运算会改变其中某些参数的值,

2.对于a++操作,编译器会开辟一个缓冲区来保存当前a的值,然后再对a操作,取值时是从缓冲区取,而不是直接从a的内存地址里取。

 

最后再验证一下理论,a = 10, printf("%d %d %d %d\n", a++, ++a, a, a++),结果应该是:12 13 13 10!

C/C++函数参数读取顺序