函数的概念

函数分类

系统函数,即库函数,是由编译系统提供的,用户不必自己定义这些函数,可以直接使用他们,如我们常用的打印函数printf()

用户定义函数,用以解决用户的专门需要

函数的作用

省去重复代码的编写,降低代码重复率

函数的定义 返回值类型 函数名(参数列表)

{

代码体

return 0;

}

函数的使用

在不同函数中的变量名可以重名,因为作用域不同

函数定义中参数称为形参,也就是形式参数,没有具体的值

函数调用过程中传递的参数称为实参,实际参数,有具体的值

在函数调用结束之后,函数会在内存中销毁,在栈区自动销毁,函数中使用过的形参也会从内存中销毁。

形参和实参

形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用。

实参出现在主调函数中,进入被调函数后,实参也不能使用。

实参变量对形参变量的数据传递是“值传递”,即单向传递,只由实参传给形参,而不能从形参传给实参

在调用函数时,编译系统临时给形参分配存储单元,调用结束后,形参单元被释放

实参单元与形参单元是不同的单元,调用结束后,形参单元被释放,函数调用结束返回主调函数后则不能再使用该形参变量。实参单元仍保留并维持原值

因此,在执行一个被调用函数时,形参的值如果发生改变,并不会改变主调函数中实参的值。

函数的声明

函数的使用分为三个步骤:

1 函数声明

2 函数定义

3 函数调用

为什么有时候不用声明呢?这是因为被调函数定义在了主函数main()之前,这种情况下,不用声明也可以调用函数

如果被调函数定义在了主函数main之后,则需要进行函数声明操作,意在告诉主函数,没事,你调用吧,我会在后面定义这个函数的

在一个工程/项目中,函数的名字是唯一的,而且也是共用的,就是在一个文件中定义函数,在另一个文件中可以直接调用

函数声明可以多次,调用也可以多次,但是定义只可以一次。

在a.c文件中定义的方法a(),在b.c文件中需要调用方法a()的话,也需要在b.c文件中声明一下,告诉b.c我这个方法在外部声明过了,放心调用吧

函数声明时,extern关键字可以省略,形参名称也可以省略,留有形参类型就行了

声明函数的三种方式:

extern int add(int a,int b);

int add(int a,int b);

int add(int,int);

而变量的声明和函数的声明不一样,变量声明不会分配内存空间,定义变量的时候才会分配内存空间并赋值,可以说定义变量包括了声明变量和分配内存空间,赋值,所以说定义是声明,而声明不是定义

main()函数和exit()函数

main函数是主函数,是程序的入口,main函数执行到最后一个大括号,代表程序结束,

在main函数中return任意整数,也代表程序结束,程序就此结束,return语句后面的代码都不会执行

在非main函数中,return语句代表函数的返回值,而在非main函数中执行exit函数也可以直接使程序结束,exit后面的所有代码都不会执行

exit函数代表结束程序,无论在哪里调用都会直接结束程序,和main函数中的return一样的效果。

多文件编程

示例:

func.c文件代码:

int max(int a, int b){

return a>b?a:b;

}

head.h文件代码

extern int max(int a,int b);

main.c文件代码

#include

#include "head.h"

int main(void){

int a = 10;

int b = 20;

int c = max(a,b);

printf("max = %d\n",c);

}

以上示例了多文件编程整个过程,将函数max()定义一个func.c文件中,将之声明在一个头文件head.h中,然后再main函数中引入头文件head.h就可以直接调用max()函数

防止头文件重复包含

当项目中头文件比较多的时候,经常会在一个头文件中导入另一个头文件,但是如果写的时候忘记了,发生你导入我,我导入你的情况,程序就会一直无限循环的导入这两个头文件,发生报错,解决此问题有两种办法:

办法一:

在头文件第一行添加 #pragma once

意思是防止头文件重复包含

但是此种办法只适用于windows系统,不适用与Linux系统

办法二:

使用: #ifndef XXX

#define XXX

.....声明语句

#endif

在定义头文件时,经常会一个.c文件,对应一个.h文件,例如上面功能的代码常常会这样定义头文件

func.c int max(int a, int b){

return a>b?a:b;

}

func.h #ifndef __FUNC_H__//常用定义方法

#define __FUNC_H__

int max(int a, int b);

#endif

main.c #include

#include "func.h"

int main(void){

int a = 10;

int b = 20;

int c = max(a,b);

printf("max = %d\n",c);

}

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐