第44课 - 函数参数的秘密(上)
第44课 - 函数参数的秘密(上)
1. 函数的参数
(1)函数参数在本质上与局部变量相同,都在栈上分配空间
(2)函数参数的初始值是函数调用时的实参值
(3)C标准只规定了 必须要将每个实参的具体值求出来之后才能进行函数调用,并没有规定函数参数的求值顺序,求值顺序依赖于编译器的实现
比如 void func(参数表达式1,参数表达式2,参数表达式3);这三个参数表达式哪一个先计算依赖于具体的编译器。
【函数参数的求值顺序】
1 #include <stdio.h> 2 3 int func(int i, int j) 4 { 5 printf("i = %d, j = %d\n",i, j); 6 return 0; 7 } 8 9 int f() 10 { 11 printf("f() Call...\n"); 12 return 1; 13 } 14 15 int g() 16 { 17 printf("g() Call...\n"); 18 return 2; 19 } 20 21 int main() 22 { 23 int k = 1; 24 25 func(k++, k++); // 参数的求值顺序取决于编译器,gcc先计算右边的再计算左边的 26 27 printf("k = %d\n", k); 28 29 a = f() * g(); // C语言中的乘法操作也是这样,左右操作数哪个先被求值依赖于编译器 30 31 return 0; 32 }
gcc编译器的输出结果:
2. 程序中的顺序点
(1)
(2)
(3)
3. C语言中的顺序点