30-1 函数是什么
在计算机科学中,子程序是一个大型程序中的某部分代码,由一个或多个语句块组成。它负责完成某项特定任务,而且相较于其他代码,具备相对的独立性。
一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软件库。
30-2 函数的分类
1、库函数
https://cplusplus.com/reference/
C语言自带的函数。
简单总结,C语言常用的库函数:IO函数、字符串操作函数、字符操作函数、内存操作函数、时间/日期函数、数学函数、其他库函数
2、自定义函数
如果库函数能干所有的事情,那还要程序员干什么?所有更加重要的是自定义函数。
自定义函数和库函数一样。有函数名,返回值类型和函数参数。
但是不一样的是这些都是我们自己来设计,这给程序员一个很大的发挥空间。
30-3 库函数
1、strcpy
https://cplusplus.com/reference/cstring/strcpy/
通过代码进行理解:
int main()
{
char arr1[20] = { 0 };
char arr2[20] = "Hello World";
strcpy(arr1, arr2);
printf("%s\n",arr1);
return 0;
}
运行结果:
2、memset
https://cplusplus.com/reference/cstring/memset/
代码1:
int main()
{
char arr[20] = "Hello World";
memset(arr, 'x', 5);
printf("%s\n", arr);
return 0;
}
运行结果:
代码2:
int main()
{
char arr[20] = "Hello World";
memset(arr+6, 'y', 3);
printf("%s\n", arr);
return 0;
}
运行结果:
本次只是初次了解,学会如何通过阅读文档进行学习,后期会详细讲解。
使用库函数时,一定要记得加相应的头文件!!!
参考文献:
MSDN(Microsoft Developer Network)
www.cplusplus.com
http://en.cppreference.com(英文版)
http://zh.cppreference.com(中文版)
30-4 自定义函数
函数的组成
ret_type fun_name(para1,*)
{
statement; //语句项
}
ret_type 返回类型
fun_name 函数名
para1 函数参数
例1:写一个函数,找出两个整数中的最大值
//函数的定义
int get_max(int x, int y)
{
return(x > y ? x : y);
}
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
//函数的调用
int r = get_max(a, b);
printf("max=%d\n", r);
return 0;
}
运行结果:
图解:
例2:写一个函数可以交换两个整形变量的内容
代码如下:
void swap(int x, int y)
{
int z = 0;
z = x;
x = y;
y = z;
}
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
printf("交换前:a=%d b=%d\n", a, b);
swap(a, b);
printf("交换后:a=%d b=%d\n",a,b);
return 0;
}
前后竟然没有变化!
原因:
调试一下看看吧
前后对比发现:
x与y的值进行了交换,但是a与b的值仍然没有改变;x与y只是接收了a与b的值,并没有接收地址
结论:
当实参传递给形参的时候,形参是实参的一份临时拷贝;对形参的修改不会影响实参
修改:
//写一个函数可以交换两个整形变量的内容
//x,y为形参
void swap(int* x, int* y)
{
int z = 0;
z = *x; //z=a
*x =*y; //a=b
*y = z; //b=z
}
int main()
{
//a,b为实参
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
printf("交换前:a=%d b=%d\n", a, b);
swap(&a, &b);
printf("交换后:a=%d b=%d\n",a,b);
return 0;
}
运行结果: