比特鹏哥6-函数【自用笔记】

本文详细介绍了函数在C语言中的概念,包括库函数的使用、自定义函数的语法结构、形参和实参的区别、return语句、数组作为参数、传值调用、嵌套调用与链式访问,以及函数的声明和定义,涉及static和extern的关键概念。
摘要由CSDN通过智能技术生成

1.函数的概念

2.库函数

在这里插入图片描述
在这里插入图片描述

库函数的使用方法

在这里插入图片描述

#include<math.h>
int main(){
	double d=16.0;
	double r=sqrt(d);
	printf("%lf",r);
	return 0;

}


### 4.000000 ###

3.自定义函数

语法结构
ret_typr   fun_name(形式参数)
{
函数体

}


ret_typr   函数返回类型  void 作为函数返回类型的时候,表示什么都不返回。
fun_name   函数名
()括号内是形式参数
{ }括号内是函数体
/计算两个数的和


int Add(int x,int y) {//函数类型是 int; 函数名称是Add; 函数个数是2个; 
	int z = 0;
	z = x + y;//此时的a和b是形式参数,形参
	return z;
}
int main(){
	int a = 10;
	int b = 100;
	//输入
	scanf("%d,%d", &a, &b);
	int c = Add(a, b);//a和b是真实传递给Add的参数,是实际参数,实参
	printf("%d", c);
	return 0;




}

4.形参和实参

实参
真实传递给函数的参数,是实际参数,实参
形参
实际上,如果只是定义了 Add 函数,而不去调用的话, Add 函数的参数x和 y只是形式上存在的,不会向内存申请空间,不会真实存在的,所以叫形式参数
实参与形参的关系

5.return语句

return后边可以是一个数值,也可以是一个表达式,如果是表达式则先执行表达式,再返回表达式的结果。
return后边也可以什么都没有,直接写 return;这种写法适合函数返回类型是void的情况。
return返回的值和函数返回类型不一致,系统会自动将返回的值隐式转换为函数的返回类型。
return语句执行后,函数就彻底返回,后边的代码不再执行。
如果函数中存在if等分支的语句,则要保证每种情况下都有return返回,否则会出现编译错误。

6.数组做函数参数

一维数组
void set_arr(int arr[], int sz) {
	int i = 0;
	for (i = 0; i < sz; i++);
	{
		arr[i] = -1;
	}


}
printf_arr(int arr[], int sz) {
	int i = 0;
	for (i = 0; i < sz; i++);
	{
		printf("%d",arr[i]);
	}


}
void main() {
	int arr[10] = { 1,2,3,4,5,6,7,8,9,5 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	//写一个函数,使得arr数组里面的数值全部为-1;
	set_arr(arr, sz);
	//写一个函数,打印出arr数组里的全部内容。
	printf_arr(arr, sz);

}
数组传参的几个重点知识
		函数的形式参数要和函数的实参个数匹配
		函数的实参是数组,形参也是可以写成数组形式的形参
		如果是一维数组,数组大小可以省略不写形参
		如果是二维数组,行可以省略,但是列不能省略
		数组传参,形参是不会创建新的数组的
		形参操作的数组和实参的数组是同一个数组
二维数组

在这里插入图片描述

7.传值调用

8.嵌套调用和链式访问

8.1嵌套调用
//求某年某月的天数

int is_leap_year(int y) {
	//如果是闰年,返回1;
	//如果不是闰年,返回0;
	if ((y % 4 == 0 && y % 100 == 0) || (y % 400 == 0))
		return 1;
	else
		return 0;




}
int get_days_of_month(int y, int m) { 
	//y=1999 m=2月  那么days[2]就是下标为2的28,再判断,y是不是闰年,是不是2月
	int days[13] = { 0, 31 , 28 , 31 , 30 , 31 ,30,31,31,30,31,30,31 };
				//  0月 1月  2月  3月  4月
	int d = days[m];
	if (is_leap_year(y) && m == 2);//是闰年还是2月,就要加一天
	{
		d += 1;

	}
}

int  main() {
	int y = 0;//年
	int m = 0;//月
	scanf("%d,%d", &y, &m);  //输入的是1999 2
	get_days_of_month(y, m);
	int d = get_days_of_month(y, m);
	printf("%d", d);

	return 0;




}
函数可以嵌套使用,但是不可以嵌套定义
8.2链式访问
将一个函数的返回值作为另一个函数的参数,像链条一样将函数串起来的函数就是链式访问。
//链式访问
int  main() {

	int len = strlen("asdfghj");  //7
	printf("%zd", len);
	return 0;

}

int main() {

	printf("%zd", strlen("asdfghj"));
}

9.函数的声明和定义

一定要先声明 后使用
多个文件
一般情况下,
函数的声明,类型的声明是放在头文件(.h)的
函数的实现是放在原文件(.c)的

在这里插入图片描述

static 和 extern

在这里插入图片描述

extern是用来声明外部符号的。

在这里插入图片描述

static是静态的的意思,可以用
			修饰局部变量:一定是{}内部的变量
			修饰全局变量:{} 大括号外部定义的变量
			修饰函数
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值