当前位置:网站首页>C语言函数入门介绍
C语言函数入门介绍
2022-07-27 05:03:00 【我真不是二次元】
函数
一段具有某项功能的代码,是C语言中管理代码的最小单位
把代码进行封装成一个个函数,可以方便管理和调用代码
函数的分类
1.标准库函数
由C语言标准委员会为C语言以函数的形式提供的一些基础功能,被封装libc.so库中,使用时需要包含对应的头文件,通过对应的函数名(实参)方式即可调用标准库中的函数
例如以下几个均为标准库中的函数
libm.so
#include 《time.h>
time_t time(time_t *tloc);
功能:返回自1970-1-1 0:0:0到函数执行时总共过了多少秒
time_t sec =time(NULL);
#include <stdlib.h>
int system(const char *command);
功能:执行系统命令
system("clear");
int rand (void);
功能:返回值一个随机数
int num=rand();
void srand(unsigned int seed);
2.系统函数
是操作系统以函数接口形式提供的一些列功能,但是它不是真正意义上的函数
有内存管理、文件管理、文件的输入输出、进程管理、信号处理、进程通信、线程管理、线程同步、网络通信等
3.第三方库函数
由第三方提供的开源或者收费的代码库
MD5 加密算法
Json 序列化、反序列化
Xml 配置文件解析
4.自定义函数
为了更好得管理自己的代码、减少代码冗余把代码封装成函数形式
函数声明:
函数声明的目的是为了告诉其他代码该函数的调用格式隐式声明:在调用函数时,前面没有出现过该函数的声明或定义,就会产生隐式声明的警告,参数会根据实参来猜测,返回值会猜测为int类型
反正不要产生隐式声明,只要在调用前有声明或定义即可返回值类型 函数名(类型1 形参名1,类型2 形参名2,…);
注意:
1、C中函数名一般全部小写,下划线分隔
2、如果返回值不需要,则写void
3、如果不需要形参,则建议也写上void
4、就算形参类型相同,每个都要加类型名函数定义:函数的实现代码
返回值类型 函数名(类型1 形参名1,类型2 形参名2,…)
{
//函数体
return [val];
}
3. 函数调用:
函数名(实参);
注意:
1、在函数调用之前有函数定义,则函数声明可以省略
2、函数的返回值会返回在调用位置,可以立即显示,也可以用变量记录
3、一个函数建议最好不要超过50行代码
4、声明的内容要与定义完全一致
5、如果不需要返回值、参数,则一定要写void
6、在调用前,没有声明、定义,产生隐式声明的警告
函数传参
- 形参变量、函数内定义的变量都只属于它所在的函数,出了该函数就不能再用了
- 普通实参与形参之间是通过赋值的方式传递数据的(单向值传递)
3. return 其实是把数据存放到一个公共区域(函数之间都可以访问的区域),如果不写return语句,那么就会读取该区域原来的数值,得到一个垃圾数据 - 当数组作为函数的参数时,中括号中的长度就会丢失,需要额外增加一个变量传递数组的长度
- 数组作为函数参数传递时,传递的是数组的首地址,叫做"址传递",函数和函数的调用者可以共享同一个数组
设计函数的建议
1、一个函数最好就解决一个问题,降低错误率,提高可读性
2、尽量减少函数之间的依赖层数(降低耦合度)
3、数据由调用者提供,结果返回给调用者(提高函数的通用性)
4、考虑函数的非法参数,可以通过返回值的方式告诉调用者你的参数有误,也可以通过注释方式写明情况(提高函数的健壮性)
边栏推荐
猜你喜欢

如何快速有效解决数据库连接失败问题

Flask请求数据获取与响应

Alphabetic order problem

Flask的使用

Source code of document type full-text retrieval knowledge base management system

登录到主页功能实现

Database connection pool & Druid usage

Simplify the mybits framework of JDBC

Carmaker quick start lesson 4 developing 48V P1 hybrid system

Pinball games
随机推荐
Mysql速成
小米商城项目_注册
Common commands in CONDA and pip environments
Notes Series docker installation PostgreSQL 14
redis事务
数据库迁移报错解决
自己动手做一个爬虫项目
Rolling Division
Database connection pool & Druid usage
numpy 数据类型转化
用户管理-分页
MQ FAQ
蓝图-类视图方法
用户的管理-限制
李宏毅机器学习组队学习打卡活动day02---回归
Notes series k8s orchestration MySQL container - stateful container creation process
实用小工具: Kotlin 代码片段
李宏毅机器学习组队学习打卡活动day04---深度学习介绍和反向传播机制
秒杀系统设计
GCC 编译选项