C语言的 函数

来源:互联网 发布:python黑客教程 编辑:程序博客网 时间:2024/05/16 05:34

函数是C语言的核心。
C语言是面向过程的程序设计语言。

函数的声明和定义

程序中的声明可理解为预先告诉编译器实体的存在,如:变量,函数,等等。不需要分配空间。

程序中的定义明确指示编译器实体的意义。需要分配空间。

声明和定义并不相同!!!

函数参数

函数参数在本质上与局部变量相同,都是在上分配空间。
函数参数的初始值是函数调用时的实参值。

这里写图片描述

注意:

函数参数的求值顺序依赖于编译器的实现!!!
并不一定是从左到右,不一定从第一个参数开始计算

C语言中大多数运算符对其操作数求值的顺序都是依赖于编译器的实现的 !!! 例如 *乘法

int i = f() * g(); f()和g()两个函数,哪个先被调用并不确定。

程序中的顺序点

程序中存在一定的顺序点。
顺序点指的是执行过程中修改变量值的最晚时刻
在程序达到顺序点的时候,之前所做的一切操作必须反映到后续的访问中

程序中常见的的顺序点:
1、每个完整表达式结束时
2、&&, ||, ?:, 以及逗号表达式的每个运算对象计算之后
3、函数调用中对所有实际参数的求值完成之后(进入函数体之前)

举例说明:

    int k = 2;    int a = 1;    k = k++ + k++;//在上行代码结束时,有一个顺序点,两次自增运算在加法//时候进行,2+2+1+1=6,最后k=6   //需要注意,这里如果是前置++,则会立刻完成自加。     printf("k = %d\n", k);    if( a-- && a ) //&&之前a就完成自减,不会打印a    {        printf("a = %d\n", a);    }

再举例说明:

void f(int i, int j){    printf("%d, %d\n", i, j);}int main(){    int k = 1;    f(k, k++);//函数中打印结果为 21    printf("%d\n", k);//此时打印k=2    while(1);    return 0;}

程序的输出结果为2,1,2
因为在调用f函数时,f(i , j) 函数,在所有参数求值完成后有顺序点,j对应的参数取值1,并完成了k自加,i取值了k自加后的结果。

函数的缺省认定

 C语言会默认没有类型的函数参数为int,而且返回值没有类型,也指定为int。但是这种形式不推荐使用。

小结

 C语言是一种面向过程的语言
 函数可理解为解决问题的步骤
 函数的实参并没有固定的计算次序
 顺序点是C语言中变量改变的最晚时机
 函数定义时参数和返回值的缺省类型为int

0 0