函数从入门到进阶--知识点总结加代码实战
函数从入门到进阶很多初学C语言的朋友学到 函数 这一章都会卡壳看不懂形参实参、不知道返回值怎么用、分不清全局/局部变量、写代码只会堆main函数、代码杂乱冗余还容易报错。今天这篇博客不堆砌概念全程纯干货可直接运行的实战代码从零带你吃透C语言函数学完直接上手写模块化代码。一、先搞懂到底什么是函数1. 通俗理解函数就是封装好的一段可重复使用的代码块。类比生活洗衣机就是一个“函数”。输入衣服、洗衣液参数内部执行进水、洗涤、脱水函数内部逻辑输出干净的衣服返回值写代码时把重复用到的功能求和、判断奇偶、排序、计算最值封装成函数不用每次重复写代码大幅精简代码、减少bug。2. C语言函数两大核心优势代码复用写一次随处调用不用重复造轮子模块化编程功能拆分清晰代码易读、易改、易排查错误二、C语言函数完整语法必背1. 标准函数格式返回值类型 函数名(形参列表){// 函数主体实现具体功能return返回值;// 和返回值类型对应}2. 各部分详解新手最易混淆点返回值类型函数执行完返回的数据类型int、float、void、char函数名自定义命名遵循标识符规则字母/数字/下划线不能数字开头形参列表函数接收的参数相当于“变量占位符”可空void无返回值函数不需要写return3. 函数的3种分类实战常用无参无返回值简单打印类功能有参无返回值对传入数据做处理不返回结果有参有返回值核心常用处理数据并返回结果三、从零实战3类函数完整代码案例所有代码可直接复制编译运行适配Dev-C、VS、gcc所有编译环境。实战1无参无返回值函数适用场景固定提示、固定图案打印、无需传参和结果的功能。#includestdio.h// 自定义无参无返回值函数voidprintHello(){printf( C语言函数实战 \n);printf(干货满满零基础入门\n);}intmain(){// 直接调用函数printHello();printHello();// 可重复调用return0;}运行结果 C语言函数实战 干货满满零基础入门 C语言函数实战 干货满满零基础入门核心要点void无返回值括号无形参直接函数名()调用。实战2有参无返回值函数适用场景接收外部数据完成打印、判断、修改等操作无需返回结果。案例传入两个整数打印两数之和#includestdio.h// 有参无返回值函数形参a、bvoidgetSum(inta,intb){intsumab;printf(两数之和为%d\n,sum);}intmain(){intx10,y20;// 传入实参x、ygetSum(x,y);getSum(50,30);// 直接传常量也可以return0;}运行结果两数之和为30两数之和为80重点区分形参 vs 实参形参函数定义时括号内的变量int a, int b仅占位不分配实际内存实参调用函数时传入的变量/常量x、y、50、30是真实数据实战3有参有返回值函数项目核心这是最常用的函数类型接收参数处理后返回结果给主函数使用。案例1求两个数的最大值#includestdio.h// 有参有返回值接收两个int返回最大值intintgetMax(inta,intb){if(ab){returna;// 返回结果}else{returnb;}}intmain(){intnum1,num2;printf(请输入两个整数);scanf(%d %d,num1,num2);// 接收函数返回值intmaxgetMax(num1,num2);printf(最大值为%d\n,max);return0;}案例2进阶实战判断一个数是否为素数#includestdio.h#includemath.h// 素数判断函数是素数返回1不是返回0intisPrime(intn){// 小于2不是素数if(n2)return0;// 遍历判断是否能被整除for(inti2;isqrt(n);i){if(n%i0){return0;// 能被整除不是素数}}return1;// 是素数}intmain(){intnum;printf(请输入一个数字);scanf(%d,num);if(isPrime(num)){printf(%d 是素数\n,num);}else{printf(%d 不是素数\n,num);}return0;}四、新手必踩坑函数声明与调用规则1. 经典报错隐式声明函数C语言规则函数必须先声明/定义后调用。如果把自定义函数写在main函数后面直接调用会报错。定义在调用之后且未声明就会报错2. 两种解决方法必掌握方法一函数写在main函数之前适合小型代码方法二函数声明大型项目标准写法#includestdio.h// 函数声明只写头部分号结尾intgetSum(inta,intb);intmain(){printf(%d\n,getSum(10,20));return0;}// 函数定义写在后面intgetSum(inta,intb){returnab;}总结声明告诉编译器“有这个函数”定义是函数具体实现。五、核心重难点局部变量 全局变量90%出错的根源变量作用域搞不清楚。1. 局部变量定义在函数内部仅在当前函数有效函数结束立即销毁不同函数可以定义同名局部变量互不干扰2. 全局变量定义在所有函数外部整个程序所有函数都可以使用程序运行期间始终占用内存3. 对比实战代码#includestdio.hintnum100;// 全局变量voidtest(){intnum200;// 局部变量优先使用printf(函数内部num%d\n,num);}intmain(){printf(main全局num%d\n,num);test();return0;}运行结果main全局num100函数内部num200核心规则局部变量优先局部会屏蔽全局。六、高阶实战递归函数经典例题递归函数自己调用自己核心是「递推终止条件」常用于阶乘、斐波那契数列、遍历问题。实战递归求 n 的阶乘#includestdio.h// 递归求阶乘intfactorial(intn){// 终止条件if(n1||n0)return1;// 递归公式returnn*factorial(n-1);}intmain(){intn;printf(请输入阶乘数);scanf(%d,n);printf(%d的阶乘为%d\n,n,factorial(n));return0;}递归必备核心必须有终止条件否则无限递归、栈溢出报错七、函数实战总结无返回值用void有返回值必须对应类型return先声明/定义后调用杜绝隐式声明报错形参是占位符实参是真实数据数量、类型必须一一对应局部变量仅限当前函数全局变量全程序通用递归必须设置终止条件避免死递归项目开发优先用函数封装拒绝全部代码堆在main里八、实战练习巩固提升大家可以自己手写练习吃透函数核心封装函数求三个整数的最大值封装函数判断闰年递归实现斐波那契数列前n项输出封装函数实现数组求和、求平均值函数是C语言从“入门”到“进阶”的关键看懂概念没用动手敲代码、调试报错、独立封装功能才是真正学会。本篇所有案例均可直接运行建议大家逐行敲写修改参数测试效果彻底吃透函数逻辑

相关新闻

当客户提前做完功课,大客户销售必须把价值力讲成利润语言

当客户提前做完功课,大客户销售必须把价值力讲成利润语言

客户在接触销售之前,已经用AI搜索引擎把供应商和方案筛过一遍。销售再从头讲产品功能,只会被客户当成没有增量信息的噪音。价值力要做的是把对话拉到客户的利润、投资和经营风险上。一、先判断客户已经走到采购七阶段的哪一步 PSS⁵ 体系力里&#xff0c…

2026/10/12 18:03:14 阅读更多 →
Linux系统关机命令poweroff详解:从原理到实战应用

Linux系统关机命令poweroff详解:从原理到实战应用

1. 项目概述:从“关机”这个简单动作说起在Linux世界里,关机这个操作,远比你想象的要复杂和有趣。对于很多刚接触Linux的朋友,尤其是从Windows转过来的用户,可能会觉得“关机不就是点一下按钮吗?”但在服务…

2026/9/23 16:17:00 阅读更多 →
Java Web项目部署实战:从Tomcat到Docker的完整指南

Java Web项目部署实战:从Tomcat到Docker的完整指南

1. 项目概述:从代码到服务的最后一公里 每次在本地IDE里把项目跑得顺风顺水,看着浏览器里漂亮的界面,心里总会冒出一个念头:这玩意儿怎么才能让全世界的人都能访问到?这就是我们今天要聊的核心——把一个Web项目从你的…

2026/10/10 1:54:48 阅读更多 →

最新新闻

二叉树详解:从遍历到搜索,一文搞定核心概念与工程实践

二叉树详解:从遍历到搜索,一文搞定核心概念与工程实践

1. 二叉树:数据结构意义上的“第一座山” 1.1 线性结构扛不住层级关系,这是它的起点 先扯点背景。数组、链表、队列、栈,这些数据结构摆在桌上,共性只有一个:每个元素最多一个前驱、一个后继,整条数据从前…

2026/10/13 17:02:56 阅读更多 →
ConcurrentHashMap源码解析:从put流程到扩容机制

ConcurrentHashMap源码解析:从put流程到扩容机制

很久以前第一次翻开 ConcurrentHashMap 源码的时候,我的状态基本是:找到 JDK 安装目录,解压 src.zip,双击某个类,然后盯着 UnSafe、CAS、ForwardingNode、红黑树这些词半小时缓不过来。这篇源码学习笔记想帮你解决一个…

2026/10/13 17:02:56 阅读更多 →
DNF仓库与NFS共享部署指南:内网软件源标准化实践

DNF仓库与NFS共享部署指南:内网软件源标准化实践

1. 设计思路:三个关键决策,决定这个方案好不好用1.1 为什么做本地DNF仓库,而不是直接拷RPM很多刚接触Linux服务器运维的朋友,在看到“部署DNF仓库及NFS共享服务”这个标题时,第一反应往往是:我直接把RPM包拷…

2026/10/13 17:02:56 阅读更多 →
普通牛马职场生存指南:用交易心态稳住工作与生活

普通牛马职场生存指南:用交易心态稳住工作与生活

“牛马”这个词最近在职场圈越来越火,几乎成了打工人自嘲的统一代名词。说好听点是调侃,说难听点,大家心里都清楚:工作干得不少,收入不见得涨,领导安排什么都得接,每天下班累得不想说话&#xf…

2026/10/13 17:02:56 阅读更多 →
Python异步爬虫实战:从asyncio协程到aiohttp并发控制与重试机制

Python异步爬虫实战:从asyncio协程到aiohttp并发控制与重试机制

1. 为什么要拥抱async:从同步爬虫的痛点说起如果你写过几天爬虫,大概率遇到过这种场景:一个列表页几十个详情链接,用requests挨个串行去请求,每个请求要等网络响应回来才继续下一个,跑起来像乌龟散步。等到…

2026/10/13 17:02:56 阅读更多 →
面向对象设计核心:类、封装、继承与多态实战解析

面向对象设计核心:类、封装、继承与多态实战解析

1. 为什么写了这么多年代码,我还是建议认真学一遍面向对象设计 先说说我自己。写程序写了十几年,早些年我其实挺反感面向对象那套东西的。觉得又是类又是继承,绕来绕去,不如直接写函数一把梭来得爽快。那时候写业务逻辑&#xff0…

2026/10/13 17:01:53 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →