一、C语言中函数的分类

c语言中函数的分类:

  • 库函数
#include <string.h>

//strcpy函数
int main()
{
	char arr1[] = "kevin";
	char arr2[20] = "#########";
	strcpy(arr2, arr1);
	printf("%s\n", arr2);
	return 0;
}
//memset函数(内存设置)
int main()
{
	char arr[] = "hello world";
	memset(arr, '*', 5);//第二个参数必须是单引号,字符在储存时会储存为ascii码值,是个整数
	printf("%s\n", arr);
	return 0;
}

C语言常用的库函数都有:

  • io函数
  • 字符串操作函数
  • 内存操作函数
  • 时间/日期函数
  • 数学函数
  • 其他库函数
  • 自定义函数

Ret_type fun_name(para1,  …)

{

Statement;//语句项

}

 

#include <stdio.h>
#include <math.h>

//写一个函数可以找出两个数的较大值
int get_max(int x, int y)
{
	if(x<y)
		return y;
	else 
		return x;
}

//int main()
//{
//	int a = 10;
//	int b = 20;
//	int max = get_max(a, b);
//	printf("较大值是:%d\n", max);
//	return 0;
//}

void swap1(int x, int y)
{
	x = x^y;
	y = x^y;
	x = x^y;//无法传参,只在函数内部有用,没有与a,b建立联系
}

void swap2(int* pa, int* pb)
{
	*pa = (*pa)^(*pb);
	*pb = (*pa)^(*pb);
	*pa = (*pa)^(*pb);//传入地址,建立联系,指针计算时需要加括号
}

//int main()
//{
//	int a = 10;
//	int b = 20;
//	
////	swap1(a, b);
//	swap2(&a, &b);
//	
//	printf("a = %d, b = %d\n", a, b);
//	return 0;
//}


//找出素数的函数
int is_prime(int n)
{
	int j = 0;
	for(j =2;j<=sqrt(n);j++)//注意此处优化时要改为"<="
	{
		if(n%j == 0)
		{
			return 0;//	break,return 0 .可以直接结束函数,比break更强
		}
	}
	
	return 1;//只有走完循环才可以走到这里,不用判断
		
}

int main()
{
	int i = 0;
	int count = 0;
	for(i=101;i<=200;i+=2)
	{
		if(	1 == is_prime(i))
		{
			printf("%d ", i);
			count++;
		}
	}
	printf("\ncount = %d\n", count);

	return 0;
}

实际参数(实参):

实际上传递的函数,当实参传给形参时,形参其实是实参的一份拷贝,当形参发生变化时,实参不会发生改变。

 

形式参数(形参):

只在函数调用时,在函数内部使用的参数,当函数调用完成后自动销毁。

 

 

传递数组参时为了节省空间,只传递第一个元素的地址.本质上是个指针int* arr[0]

 

 

函数的调用:

传值调用

  • 函数的形参与实参分别占有不同的内存块,对形参的修改不会影响实参。

传址调用

  • 传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式。
  • 这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操作,作为函数外部的变量。

二、函数的嵌套调用和链式访问

函数和函数是可以有机的组合的。

链式访问

把一个函数的返回值,作为另一个函数的参数。

三、函数的声明与定义

函数声明:

1.要告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是 具体存不存在不重要。

2.函数的声明一般出现在函数的使用之前。要满足先声明再使用。

3.函数的声明一般要放在头文件中。

//函数声明,一般放进.h文件里
void Add(int*);

函数定义:

函数具体功能的实现,一般放在.c文件中。

////函数定义
void Add(int* num)
{
	(*num)++;//++优先级比较高
}

主文件:

int main()
{
	int num = 0;
	Add(&num);
	printf("num = %d\n", num);
	Add(&num);
	printf("num = %d\n", num);
	Add(&num);
	printf("num = %d\n", num);
	Add(&num);
	printf("num = %d\n", num);
	
	return 0;
}