标签:
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 }
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 }
1. 在将参数入栈前,编译器会先把参数的的表达式都处理掉,哪怕这些运算会改变其中某些参数的值,
2.对于a++操作,编译器会开辟一个缓冲区来保存当前a的值,然后再对a操作,取值时是从缓冲区取,而不是直接从a的内存地址里取。
最后再验证一下理论,a = 10, printf("%d %d %d %d\n", a++, ++a, a, a++),结果应该是:12 13 13 10!
标签:
原文地址:http://www.cnblogs.com/guxuanqing/p/5840439.html