码迷,mamicode.com
首页 > 其他好文 > 详细

第44课 函数参数的秘密(上)

时间:2016-04-05 09:28:20      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:

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课 函数参数的秘密(上)

标签:

原文地址:http://www.cnblogs.com/5iedu/p/5353756.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!