第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语言中的顺序点

 

posted @ 2019-11-13 23:17  Hengs  阅读(328)  评论(0编辑  收藏  举报