目录
函数
1. 函数是什么
在计算机科学中,子程序(英语:Subroutine, procedure, function, routine, method, subprogram, callable unit),是一个大型程序中的某部分代码, 由一个或多个语句块组 成。它负责完成某项特定任务,而且相较于其他代 码,具备相对的独立性。
一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软件库。
维基百科中对函数的定义:子程序
2. C语言中函数的分类
1.库函数
2.自定义函数
2.1 库函数
为什么会有库函数?
-
我们知道在我们学习C语言编程的时候,总是在一个代码编写完成之后迫不及待的想知道结果,想 把这个结果打印到我们的屏幕上看看。这个时候我们会频繁的使用一个功能:将信息按照一定的格 式打印到屏幕上(printf)。
-
在编程的过程中我们会频繁的做一些字符串的拷贝工作(strcpy)。
-
在编程是我们也计算,总是会计算n的k次方这样的运算(pow)。
像上面我们描述的基础功能,它们不是业务性的代码。我们在开发的过程中每个程序员都可能用的到, 为了支持可移植性和提高程序的效率,所以C语言的基础库中提供了一系列类似的库函数,方便程序员 进行软件开发。
简单的总结,C语言常用的库函数都有:
IO函数 (输入输出函数):printf scanf getchar putchar
字符串操作函数 :strcmp strlen
字符操作函数 :toupper(小写转大写)
内存操作函数 :memcpy memcmp memset
时间/日期函数 :time
数学函数 :sqrt pow(求次方)
其他库函数
举例
1.strcpy
char是函数的返回类型
strcpy是函数的名字
括号里逗号隔开的两个是函数的参数
#include<string.h>
int main()
{
char arr1[20]={
0};
char arr2[]="hello world";
//把arr2放到arr1中
strcpy(arr1,arr2);
printf("%s",arr1);//打印arr1的字符串%s--以字符串的格式打印
return 0;
}
2.memset–内存设置
int main()
{
char arr[] = "hello world";
memset(arr,'x',5);//把arr这串空间的前五个字符全部设置为x
printf("%s\n",arr);
return 0;
}
2.2 自定义函数
自定义函数和库函数一样,有函数名,返回值类型和函数参数。
但是不一样的是这些都是我们自己来设计。这给程序员一个很大的发挥空间。
写一个函数可以求出两个整数的最大值
get_max(int x,int y)
{
int z = 0;
if(x>y)
z = x;
else
z = y;
return z;//返回z 也就是最大值
}
int main()
{
int a = 10;
int b = 20;
//函数的调用
int max = get_max(a,b);
printf("max = %d\n",max)
return 0;
}
写一个函数可以交换两个整型变量的内容
//函数返回类型的地方写成void,表示这个函数不返回任何值,也不需要返回
//在swap1在调用的时候,实参传给形参,其实形参是实参的一份临时拷贝。
//改变形参不能改变实参!!!
//传值调用
void swap1(int x,int y)//这个代码是有问题的
{
int z = 0;
z = y;
y = x;
x = z;
}
int main()
{
int a = 10;
int b = 20;
//写一个函数--交换两个整型变量的值
printf("交换前:a = %d b = %d\n", a, b);
swap1(a,b);
printf("交换后:a = %d b = %d\n", a, b);
return 0;
}
代码出错的原因是在swap函数里面进行的交换,发现其实是和主函数没有关系的,所以在swap函数以后打印a和b的值发现没有变化。
这串代码应该它通过指针来完成
//传址调用
void swap2(int* pa,int* pb)
{
int z = 0;
z = *pa;
*pa = *pb;
*pb = z;
}
int main()
{
int a = 10;
int b = 20;
//写一个函数--交换两个整型变量的值
printf("交换前:a = %d b = %d\n", a, b);
swap2(&a, &b);
printf("交换后:a = %d b = %d\n", a, b);
return 0;
}
什么时候需要使用到指针呢?
在函数中组若需要改变了主函数中的变量的值就需要用到指针。
3. 函数参数
3.1 实际参数(实参)
真实传给函数的参数,叫实参。也就是说在函数调用的时候传给函数的值叫做实际参数。
实参可以是:常量、变量、表达式、函数等。
无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。
3.2 形式参数(形参)
形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内存单元),所以叫形式参数。也就是在函数定义的时候括号中的变量称为形参。
形式参数当函数调用完成之后就自动销毁了。因此形式参数只在函数中有效。(生命周期很像局部变量)
比如在swap1在调用的时候,实参传给形参,其实形参是实参的一份临时拷贝。(形参实例化之后其实相当于实参的一份