当前位置: 首页 > news >正文

C语言基础学习——函数

函数定义:实现函数,就是把功能实现

函数调用:就是使用这个功能

计算机模型(函数功能类似):

输入----->处理----->输出


一、函数定义

类型标识符 函数名(形式参数) { 函数体 //声明部分,语句部分 }

1.类型标识符:返回值类型说明符

这个类型说明符用来规定返回值的类型的

基本类型:整型、浮点型、字符型 //注意,数组类型不能用做函数返回值类型

注意:如果带出的结果类型和返回值类型说明符不一致,最终结果以返回值类型说明符为准

2.函数名:是标识符,用来表示是哪个函数

命名规则符合标识符命名规则

3.形式参数(形参):是函数获取数据的入口,函数要处理数据,可以通过形参获得

eg:y=x+2; x就类似于形式参数

实参和形参:

1.要求类型相同,个数匹配

2.实参和形参是一一对应的---位置对应

3.不需要形参

注意:如果函数不需要传入数据可以不写形参 //不写形参或者写成void

4.函数体:实现函数功能的代码

函数定义的位置

1.写在main函数前面

2.写在main函数后面 //写在后面需要提前声明函数

函数声明:复制函数头加上分号


二、函数实现

考虑:

1.功能是否独立单一

2.健壮性 //看后期维护是否简单

3.实用性

流程:

step1:先根据功能确定函数名

step2:从 输入----->处理----->输出 这个模型出发

1.函数需要输入什么---需要哪些数据,数据类型

形参的语法

每个形参都必须指明类型和变量名

类型 变量名1,类型 变量名2,...

eg: int a,int b //注意不能写成int a,b

step3:处理数据(函数体)

eg:int r = a +b;

step4:考虑要不要带出结果

要带出结果---考虑返回值类型说明符--->带出结果的语句

eg:return 表达式;

不带出结果---返回值类型说明符 void(空类型)

eg:add函数

int add(int a,int b) { int ret = a + b; return ret; } //or void add(int a,int b) { int ret = a + b; printf("ret = %d\n",ret); }

三、调用函数

语法:

函数名(实际参数);//实参

实参和形参:

1.要求类型相同,个数匹配

2.实参和形参是一一对应的---位置对应

eg:add(1,2);

注意:函数调用的方式

add(); //函数调用语句

add()+3 //函数调用表达式

printf("%d",add(1,2)); //函数调用充当参数


嵌套调用:

eg:

isLeapYear() { } getDays() { isLeapYear(); }

函数实现调用的本质:通过栈空间,进行现场保护和恢复


C语言中:

程序放到内存中

栈区:

特点:先进后出

平常定义的局部变量都是放在栈空间,局部变量的空间是自动申请,自动释放的

栈空间大小默认为8M

堆区:

特点:大

空间需要程序员手动申请,手动释放

一般数据量比较大的时候使用

全局区(静态区):全局变量

字符串常量区:“hello”

代码区:存放的就是程序代码指令

程序 = 数据+代码


函数的嵌套调用:

特殊的嵌套---递归//自己调用自己

直接递归:

f1(){ f1(); }

间接递归

f2() { f1(); } f1() { f2(); }

递归是一种特殊的循环---调用自身实现循环

使用:有些时候使用循环很复杂,使用递归会简单

eg:累加

int sum(int n) { if(n == 1) { return 1; }else { return sum(i-1)+i; } }

递归思路:倒着来

逻辑: 判断是否得到了递归结束的条件

是:返回结果

否:继续递推下去

注意:递归一次不要使用太多 //会发生段错误(栈空间使用完)


数组作函数参数;

int a[10];

1.数组元素做函数参数

a[0]

void printArray(int a[n])

2.数组本身做函数参数

void printArray(int a[]) //形式上,可以写成数组形式

形式上写成 int a[],本质上是int *a

int *a定位到数组的位置

要访问整个数组要在输入数组长度len

void printArray(int a[],int len) { int i; for(i = 0;i < len;i++) { printf("%d ",a[i]) } }

形参:需要一个数组形式的参数,需要一个数组长度

实参:printArray(a,len); //数组名可以代表数组首元素地址

http://www.jsqmd.com/news/1260047/

相关文章:

  • 分布式子系统中熔断降级的实战:从Hystrix到Sentinel的迁移经验谈
  • 彻底卸载OpenClaw的完整指南与深度清理技巧
  • 深入解析bq24193充电管理芯片:从USB识别到动态功率分配
  • Unity集成海康SDK PTZ控制:NET_DVR_PTZControlWithSpeed_Other参数详解与避坑指南
  • 基于YOLOv5的智能交通多目标检测系统开发实践
  • 2026年北京离婚律师推荐指南:从协议离婚到诉讼实战 - 本地品牌推荐
  • 数据分析师入门:四周掌握SQL、Excel、Power BI与Python核心技能
  • GPT-5.6与ppt-master:AI生成原生可编辑PPT的本地部署与集成实战
  • 图神经网络在零件面邻接图处理中的应用与实践
  • 多模态大语言模型在图表解读中的测试与优化实践
  • vLLM框架:提升大模型推理效率的关键技术与实践
  • RWA + AI 融合趋势:2026 真实资产上链的技术突破与机构采用路径分析
  • 双目视觉技术在工厂智能门禁系统中的应用与优化
  • AI开发C语言应用按步走,表达式计算器calc的第十三步,逻辑值、逻辑运算符、比较运算符(v2.0)
  • 普洱房屋漏水维修哪家好?卫生间/屋顶/外墙暗管测漏正规品牌排名 2026 - 宅安选房屋修缮
  • OpenClaw移动端AI助手:本地网关架构与隐私保护实践
  • 百色黄金回收,线上估价,黄金回收支持上门 - 新芸鼎珠宝首饰
  • OpenCodex大模型统一接口:配置驱动实现多模型灵活切换
  • Ubuntu镜像源更换指南与性能优化
  • 铜仁全市上门收金!6 家黄金回收实体店完整清单 - 新芸鼎珠宝首饰
  • 深入解析C++ string类:从RAII到SSO,掌握高性能字符串处理
  • 别再盲目囤包!这类大牌包越放越不值钱 - 奢侈品回收真实测评
  • LLM驱动智能体的技术演进与实践指南
  • 企业级AI管控系统BeeWorks的设计与实践
  • UnityExplorer终极指南:运行时调试、逆向分析与Mod开发实战
  • 指纹浏览器技术深度解析:平台是如何追踪你的?
  • C++ std::sort深度解析:从底层原理到高效实战避坑指南
  • Claude Skills开发指南:架构设计与性能优化
  • 540W数据量!法律法规数据库(2026更新)
  • 2026年,成都这家平价眼镜店藏着哪些高性价比宝藏,快来揭秘! - 企业推荐官