一、函数
一段具有某项功能的代码,是C语言中管理代码的最小单位
把代码封装成一个个函数,可以方便管理和调用代码
函数的分类:
标准库函数
由C语言标准委员会为C语言一函数的形式提供的一些基础功能,被封装在Libc.so库中,使用时需要包含对应的头文件,通过 函数名(实参)方式即可调用标准库中的函数
libm.so
#include
time_t time(time_t *tloc);
功能:返回自1970-1-1 0:0:0到函数执行时总共过了多少秒
time_t sec =time(NULL);
#include
int system(const char *command);
功能:执行系统命令
system("clear");
#include
int rand(void);
功能:返回一个随机数
int num =rand();
#include
#include
void srand(unsigned int seed)
srand(time(NULL))
练习3、获取10个[100,1000]之间的随机数,循环不超过10次
rand()%901+100 100~1000
获取[a,b)内的随机数
rand()%(b-a)+a
练习、双色球问题:红球一共6组,每组从1-33中抽取一个,六个互相不重复,蓝球从1-16中抽取一个数字
参考代码:
#include
#include
#include
int main(int argc,const char* argv[])
{
int red[6]={},blue=0;
srand(time(NULL));
for(int i=0;i<6;i++)
{
red[i]=rand()%33+1;
for(int j=0;j
if(red[j]==red[i])
{
red[i]=rand()%33+1;
j=0;
}
}
}
blue=rand()%16+1;
printf("red:");
for(int i=0;i<6;i++)
{
printf("%d ",red[i]);
}
printf("n");
printf("blue:%d",blue);
}
系统函数
是操作系统以函数接口形式提供的一系列功能,但是它不是真正意义上的函数
内存管理、文件管理、文件IO、信号处理、进程管理、进程通信、线程管理、线程同步、网络通信
第三方库函数
由第三方提供的开源或者收费的代码库
MD5 加密算法(不可逆)
Json 序列化、反序列化
Xml 配置文件的解析算法
自定义函数
为了更好地管理自己的代码、减少代码冗余把代码封装成函数形式
函数声明:
函数声明的目的是为了告诉其他代码该函数的调用格式
定义正在调用之前。声明可以省略
声明内容要与定义完全一致
隐式声明:在调用函数时,前面没有出现过该函数的声明或定义,就会产生隐式声明的警告
警告:参数会根据实参来猜测,返回值会猜测为int类型
反正不要产生隐式声明,只要在调用前有声明或定义即可
返回值类型 函数名(类型1 形参名1,类型2 形参名2,...);
注意:
1、C语言中函数名一般全部小写,下划线分隔
2、如果返回值不需要,则写void
3、如果不需要形参,建议也要写void
4、就算形参类型相同,每个都要加类型名
函数定义:函数的实现代码
返回值类型 函数名(类型1 形参名1,类型2 形参名2,...)
{
//函数体
return [val];
}
函数调用:
函数名(实参)
注意:
1、在函数调用之前有函数定义,则函数声明可以省略
2、函数的返回值会返回在调用位置,可以立即显示,也可以用变量记录下来,
3、一个函数建议最好不要超过50行代码
二、函数传参
1、形参变量、函数内定义的变量都只属于它所在的函数,出了该函数就不能再用
2、普通实参与形参之间是通过赋值的方式传递数据的(单向值传递)
3、return 其实是把数据存放到一个公共区域(函数都可以访问),如果不写return语句,那么就会读取该区域原来的数值,就得到一个垃圾数据
4、当数组作为函数的参数时,中括号中的长度会丢失,需要额外增加一个变量传递数组的长度
5、数组作为函数参数传递时,传递的是数组的首地址,叫做“址传递”,函数和函数的调用者可以共享同一个数组