C语言笔记5:函数

文章目录

C语言笔记5:函数

一、函数的概念

C语言中,函数是完成特定任务的一段代码,函数也叫作子程序,函数的存在提高了代码的复用率,不用对一个相同的功能写重复的代码。

C语言中存在两类函数:

  • 库函数(标准库中的函数)
  • 自定义函数

二、库函数

标准库

C语言标准规定了一些常用的函数的标准,称为标准库,不同的编译器厂商根据这个标准实现了这些函数。

包含对应头文件就能使用这些库函数。
C/C++官⽅的链接:https://zh.cppreference.com/w/c/header

cplusplus.comhttps://legacy.cplusplus.com/reference/clibrary/

三、自定义函数

c 复制代码
ret_type fun_name(形参)
{
	
}

四、形参和实参

只是定义函数却不调用的话,这个函数没有栈展开,那么函数的参数也就没有实际被分配空间,此时这个参数是形式存在而不是实际存在的,所以才叫做形式参数。

形式参数在函数被调用的时候才申请空间,这个过程就是形参的实例化。

五、return

  • return 返回的值的类型和函数定义的返回类型不一致的时候,会发生隐式转换
  • 有if等分支时,保证return每一种情况都能返回值

六、数组传参

c 复制代码
set_arr(int arr[],int sz)
{
	
}
set_arr2(int arr[][5],int sz)
{
	
}

数组传参和数组创建是一样的,只不过形式参数没有初始化的概念(C语言没有,C++有缺省参数的概念)。

定义数组类型的形式参数的时候可以省略行数。

七、嵌套调用和链式访问

嵌套调用

函数内调用另一个函数

链式访问

函数返回值作为另一函数参数

八、函数声明和定义

.h文件声明函数和全局变量

.c文件定义函数和全局变量

.c:

c 复制代码
int g_val = 10;

int add(int x,int y)
{
	return x + y;
}

.h:

复制代码
exetern int g_val;
int add(int x,int y);

static

static修饰局部变量:

static修饰局部变量,没有改变它的作用域,但是把它的生命周期延长到和程序的生命周期一样,被static修饰的局部变量存储位置变成静态区。

static修饰全局变量

static修饰全局变量没有改变它的生命周期,但是改变了它的作用域,原本全局变量具有外部链接属性,也就是多个目标文件的全局变量是可以互通的。一旦被static修饰之后,全局变量就只能作用于自身.c文件形成的.o目标文件了。

static修饰函数

在C语言里,函数都是全局的,具有外部链接属性,被static修饰之后就只能在本文件内使用了。而在C++中,还有类和对象的概念,此时的static修饰会更复杂。

于自身.c文件形成的.o目标文件了。

static修饰函数

在C语言里,函数都是全局的,具有外部链接属性,被static修饰之后就只能在本文件内使用了。而在C++中,还有类和对象的概念,此时的static修饰会更复杂。

相关推荐
Sumerking15 分钟前
llc_control.c 专项评审(v3 更新版)
c语言·开发语言·算法·obc
哪 吒22 分钟前
华为OD机试 - 云服务安全策略最优选择 - 深度优先搜索DFS(Java 新系统 200分)
java·华为od·深度优先
拒绝内耗。24 分钟前
程序员学架构(一):一张图看懂 Java 后端架构:一个请求怎样从手机到数据库?
java·智能手机·架构
棣廷24 分钟前
初识Python面向对象
java·开发语言
用户31268748772029 分钟前
ThreadLocal 到底会不会内存泄漏?源码级拆解 + 线程池陷阱
java
珍珠先生33 分钟前
P11 · MySQL 驱动版本过旧:Client does not support authentication protocol
java
墨雨晨曦8834 分钟前
2026/09/07笔记
笔记
~木雨42 分钟前
Java 并发编程架构全景:并发层的五域设计 —— 线程模型、线程池隔离、并发安全到问题治理(全体系汇总)
java·安全·架构·线程池·并发编程·高并发架构
志尊宝1 小时前
Vue3 零基础每日笔记(005):ref 响应式基础——为什么 script 里要 .value
前端·javascript·vue.js·笔记
极小狐1 小时前
从复制粘贴到可复用组件:极狐GitLab CI/CD 组件目录实战
java·ci/cd·gitlab·devops·组件化