【C语言回顾】函数


在这里插入图片描述


上期回顾: 【C语言回顾】数组
个人主页:C_GUIQU
专栏:【C语言学习】

在这里插入图片描述

前言

各位小伙伴大家好!上期小编给大家讲解了C语言中的数组,接下来讲讲C语言中的函数!
在这里插入图片描述

1. 函数的概念和分类

【概念】本质上就是子程序。
在这里插入图片描述
【分类】
库函数:C语言内部提供的函数。
自定义函数:自己写出的函数。

2.库函数

【概念】库函数(Library function)是将函数封装入库,供用户使用的一种方式。

【常见库函数】

  • IO函数
  • 字符串操作函数
  • 内存操作函数
  • 时间/日期函数
  • 数学函数

【简单示例】

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

在这里插入图片描述

3. 自定义函数

3.1 自定义函数的简单介绍

自定义函数就是自己定义的函数,功能可以多种多样!

ret_type fun_name(形式参数)
{
 
}

• ret_type 是函数返回类型
• fun_name 是函数名
• 括号中放的是形式参数
• {}括起来的是函数体

在这里插入图片描述
可以把函数想象成⼩型的⼀个加⼯⼚,⼯⼚得输⼊原材料,经过⼯⼚加⼯才能⽣产出产品,那函数也是⼀样的,函数⼀般会输⼊⼀些值(可以是0个,也可以是多个),经过函数内的计算,得出结果。

3.2 自定义函数举例

写⼀个加法函数,完成2个整型变量的加法操作

#include <stdio.h> 
int Add(int x, int y) 
{ 
 int z = 0; 
 z = x+y; 
 return z; 
} 
int main() 
{ 
 int a = 0; 
 int b = 0; 
 //输⼊ 
 scanf("%d %d", &a, &b); 
 //调⽤加法函数,完成a和b的相加 
 //求和的结果放在r中 
 int r = Add(a, b); 
 //输出 
 printf("%d\n", r); 
 return 0; 
} 

4. 形参和实参

4.1 形参

【概念】写在自定义函数内部的参数。

【形参的实例化】形式参数只有在函数被调⽤的过程中为了存放实参传递过来的值,才向内存申请空间。

4.2 实参

【概念】真实传递给函数的参数。

4.3 形参和实参的关系

4.3.1 理解

  • 形参和实参各⾃是独⽴的内存空间。
  • 形参是实参的⼀份临时拷⻉。

4.3.2 举例代码和调试

#include <stdio.h> 
int Add(int x, int y) 
{ 
 int z = 0; 
 z = x + y; 
 return z; 
} 
int main() 
{ 
 int a = 0; 
 int b = 0; 
 //输⼊ 
 scanf("%d %d", &a, &b); 
 //调⽤加法函数,完成a和b的相加 
 //求和的结果放在r中 
 int r = Add(a, b); 
 //输出 
 printf("%d\n", r); 
 return 0; 
} 

在这里插入图片描述

5. 嵌套函数和链式访问

5.1 嵌套函数

【说明】在函数中调用函数,就是嵌套函数。函数可以嵌套,但是函数不可以嵌套定义。

#include <stdio.h>
 
void test(int arr[],sz); //函数的声明
void print(int arr[],int sz);
 
int main()
{
    int arr[10] = {0};
    int sz = sizeof(arr)/sizeof(arr[0]);
    test(arr,sz);    //函数的调用——打印数组各元素
    return 0
}
 
void test(int arr[],sz)        //函数的调用
{
    int i =0;
    for(i=0;i<sz;i++)
    {
        arr[i]=i;        //数组元素赋值
    }
    print(arr,sz);        
}
 
void print(int arr[],int sz)
{
    for(i=0;i<sz;i++)
    {
       printf("%d ",arr[i]);        //打印数组元素
    }
}

5.2 链式访问

【说明】将⼀个函数的返回值作为另外⼀个函数的参数,像链条⼀样将函数串起来。

【示例】

#include <stdio.h>
int main()
{
     printf("%d\n", strlen("abcdef"));//链式访问
     return 0;
}    

6. 函数的声明和定义

6.1 单个文件

【单个文件举例】

//判断⼀年是不是闰年 

#include <stido.h> 

int is_leap_year(int y)
{
	if(((y%4==0)&&(y%100!=0)) || (y%400==0))
		return 1;
	else
		return 0;
}
int main()
{
	int y = 0;
	scanf("%d",&y);
	int r = is_leap_year(y);
	if(r == 1)
		printf("闰年\n");
	else
		printf("⾮闰年\n");
	return 0;
}

6.2 多个文件

我们写代码时候,代码可能⽐较多,不会将所有的代码都放在⼀个⽂件中;我们往往会根据程序的功能,将代码拆分放在多个⽂件中。
⼀般情况下,函数的声明、类型的声明放在头⽂件(.h)中,函数的实现是放在源⽂件(.c)⽂件中。
【示例】

//add.c
//函数的定义 
int Add(int x, int y) 
{ 
return x+y; 
} 
//add.h
//函数的声明 
int Add(int x, int y); 
//test.c
 #include <stdio.h> 
#include "add.h" 

int main() 
{ 
int a = 10; 
 int b = 20; 
 //函数调⽤ 
 int c = Add(a, b); 
 printf("%d\n", c); 
 return 0; 
} 

6.3 static 和 extern

static 和extern 都是C语言中的关键字。
【拓展】
作用域:是程序设计概念,通常来说,⼀段程序代码中所用到的名字并不总是有效的,而限定这个名字的可用性的代码范围就是这个名字的作用域。
生命周期:指的是从变量的创建(申请内存)到变量的销毁(收回内存)之间的⼀个时间段。

  • 局部变量的作用域是变量所在的局部范围。
  • 全局变量的作用域是整个工程(项目)。
  • 局部变量的生命周期是:进入作用域变量创建,生命周期开始,出作用域生命周期结束。
  • 全局变量的生命周期是:整个程序的生命周期。

6.3.1 static

static 是静态的的意思。

【用法】

  • 修饰局部变量
  • 修饰全局变量
  • 修饰函数

6.3.2 extern

extern ⽤来声明外部符号。

【用法】

  • extern的作用范围是整个工程,是共享性的。
  • 置于变量或者函数前,以标示变量或者函数的定义在别的文件中(也可能是本文件),可以有多个声明,但只能有一个定义。
  • 与"C"连用,如extern “C” void fun();告诉编译器按C的规则去翻译。
  • extern就是专门用来声明全局变量的,函数内定义的对象不能被extern声明。

6.3.1 两者区别

  • static修饰的全局是内部链接性,内部链接性在编译单元间不共享;而extern是整个工程全局共享的。

  • static修饰全局变量时,声明和定义是同时给出的;extern则是在一处定义,其他地方都是声明。

  • 它们不能同时修饰一个变量。

结语

以上就是小编对函数的讲解。
如果觉得小编讲的还可以,还请一键三连。互三必回!
持续更新中~!
在这里插入图片描述

  • 40
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值