第44课 函数参数的秘密(上)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第44课 函数参数的秘密(上)相关的知识,希望对你有一定的参考价值。
1. 函数参数
(1)函数参数在本质上与局部变量相同,都在栈上分配空间
(2)函数参数的初始值是函数调用时的实参值
(3)函数参数的求值顺序依赖于编译器的实现(注意:这里指求值顺序而不是入栈顺序!)
【实例分析】函数参数的求值顺序
#include <stdio.h> int func(int i, int j) { printf("i = %d, j = %d\\n",i, j); return 0; } int f() { printf("f() Call...\\n"); return 1; } int g() { printf("g() Call...\\n"); return 2; } int main() { int k = 1; int a = 0; func(k++,k++); //gcc、vc、bcc:2,1 printf("k = %d\\n", k); //3 a = f() * g(); //*两侧的操作数顺序也不是固定的,vc、gcc:f()先被调用,然后g() return 0; }
2. 程序中的顺序点
(1)程序中存在一定的顺序点。
(2)顺序点指的是执行过程中修改变量值的最晚时刻
(3)在程序到达顺序点的时候,之前所做的一切操作必须完成。
3. C语言中的顺序点
(1)每个完整表达式结束时,即分号处
(2)&&、||、?:、逗号表达式的每个参数计算之后
(3)函数调用时所有实参求值完成后(进入函数体之前)
【编程实验】程序中的顺序点
4. 小结
(1)函数的参数在栈上分配空间
(2)函数的实参并没有固定的计算次序
(3)顺序点是C语言中变量修改的最晚时机
以上是关于第44课 函数参数的秘密(上)的主要内容,如果未能解决你的问题,请参考以下文章