小白的编程经验(函数)

本文详细介绍了C语言中的函数,包括标准库函数、系统函数、第三方库函数和自定义函数的分类,以及函数声明、定义、调用和参数传递的原理。强调了函数设计准则,如单一职责、降低耦合度和健壮性。并给出了函数返回值、值传递和址传递的实例分析。
摘要由CSDN通过智能技术生成

函数是一段具有某种功能的代码集合,是c语言中管理代码的最小单位。把代码分成一个个函数,可以方便地管理和调用代码。

1、函数分类

标准库函数:C语言标准委员会为c语言以函数形式提供的一套基础功能,这些功能被封装在libc.so库中。

使用时需要包含头文件,调用时采用函数名(参数)方式。

系统函数:是操作系统以函数接口形式提供的一套功能:内存管理、信号处理、文件IO、文件管理、进程管理、进程通信、线程通信、线程同步、网络通信

第三方库函数:由第三方提供的,一些开源或者收费的代码

自定义函数:为了更好地管理代码,减少冗余把代码封装成函数
注意:一个函数尽量控制在50行以内,要求一个函数一个功能

2、函数声明

函数声明:告诉编译器函数的格式,方便编译器检查调用函数是否正确
函数格式: 返回值类型 函数名(参数类型 形参名,参数类型 形参名,…);
注意:函数声明分号结尾

例如:

int sum(int a,int b);

建议:
1、C语言中函数名全部小写,可以用下划线分隔
2、如果不需要参数时,建议写void,返回值类型 函数名(void));
3、如果不需要返回值时,也建议写void,但是return后面不能跟数据 void 函数名(参数类型 形参名,参数类型 形参名,…));

隐式声明:当调用函数之前没有声明和定义,编译器会猜测函数的格式,参数列表会根据调用时提供的实参(数据)来猜测,返回值猜测为int类型。

注意:函数定义如果在函数调用之前,可以忽略函数声明。如果函数调用前未声明,并且函数在调用后定义。此时,编译器会对函数进行隐式说明,如果函数格式与隐式声明不一致,编辑器会报错。

3、 函数定义

定义格式:
返回值类型 函数名(参数类型 形参名,参数类型 形参名,…)
{
      函数体
    return 返回值;
}

例如:

int sum(int a,int b)
{
	return a+b;
}

4、函数调用

函数名(实参1,实参2,…);
注意:调用函数会返回返回值,可以立即打印显示,或者赋值给变量,如果都不处理,返回的函数返回值将失效。
例如:

#include<stdio.h>

int sum(int a,int b)
{
	return a+b;
}

int main()
{	
	int a=1,b=2;
	printf("%d ",sum(a,b));
}

5、函数传参

值传递:普通变量的传参都是值传递,实参的值赋值给形参的值。两者相互独立,互不干扰。
例如:

#include<stdio.h>

int sum(int a,int b)
{
	return a+b;
}

int main()
{	
	int a=1,b=2;
	printf("%d ",sum(a,b));
}

注意:在函数内改变形参的值并不会影响实参的值,并且在函数外不能调用到形参的值。

址传递:数组变量的传参都是址传递,将实参的地址赋值给形参的地址,两者共用同一个地址。当数组变量作为函数的参数时,数组长度会丢失,所以需要额外增加一个变量len把数组的长度也传递过去。
例如

#include<stdio.h>

int sum(int a[])
{
	return a[0]+a[1];
}

int main()
{	
	int a[2]={1,2};
	printf("%d ",sum(a));
}

注意:由于址传递中形参和实参使用的是同一个地址,修改形参的值的同时,实参的值也会改变。可以简单地认为它们两个共享同一个变量。

返回值传递:return 其实是把返回值数据放到一个公共区域(函数和函数调用者能共同访问的区域)。
注意:如果不写return,该区域就是一个随机的垃圾数据。

6、函数的设计准则:

  1. 一个函数最好只解决一个问题,这样可以降低出错率、提高可读性
  2. 尽量不要依赖其他函数(降低耦合度)
  3. 数据由调用者提供,结果返回给调用者(通用性)
  4. 尽量考虑调用者提供的非法数据,可以通过提示信息、返回值告诉调用者错误原因、或者在注释中把可能出现的情况说明(健壮性)
  5. 最好一个函数不超过50行代码

结语

希望这篇文章对你有所帮助

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值