C语言中函数的分类:
1 库函数
2 自定义函数
自定义函数
如果库函数能干所有的事情,那还要程序员做什么?
所以更重要的是自定义函数
函数的组成:
ret_type fun_name (part1)
{
statement; //语句项 (函数体)
}
ret_type 返回类型
fun_name 函数名
part1 函数参数
自定义函数和库函数一样,都有函数名,返回值类型和函数参数,但是不一样的是这些都需要我们自己来设计。这给程序员一个很大的发挥空间。
举例子:写一个函数找出两个函数中的最大值
#include<stdio.h>
int get_max(int x,int y)//函数的定义
{
int z = 0;
if (x > y)
{
z = x;
}
else
{
z = y;
}
return z;//返回z-返回较大值
}
int main()
{
int a = 5;
int b = 10;
//函数的调用
int max = get_max(a, b);
printf("max = %d\n", max);
return 0;
}
这里我们定义了一个get_max函数,求a和b中的最大值,因为max 和 z都为整型,在返回时要用int。
再举一个例子:写一个函数能交换两个整型变量的内容
#include<stdio.h>
void swap(int x, int y)
{
int z = 0;
z = x;
x = y;
y = z;
}
int main()
{
int a = 10;
int b = 20;
printf("交换前:a = %d b = %d\n", a, b);
swap(a, b);
printf("交换后: a = %d b = % d\n", a, b);
return 0;
}
函数返回类型的地方写出:void,表示这个函数不返回任何值,也不需要返回。
这里我们想用swap这个函数来交换a和b,但是它没有交换,这说明写的函数出问题了
那么是哪里出问题了呢?
当代码运行到这里时,注意&a和&b,但当调用sway函数时,又为x和y开辟了一个空间x里放的10,y里放的20,地址不一样,所以一直交换x和y,a和b并不会收到影响,这里应该用到指针
#include<stdio.h>
void swap(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);
swap(&a, &b);
printf("交换后: a = %d b = % d\n", a, b);
return 0;
}
这里的*pa和*pb就分别时a和b的地址,随着它们的改变,a和b也会相应的改变
所以交换成功