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

C语言(8) 函数

第五章 函数一段功能代码被称为函数1. 为了避免代码的重复。 复用性。 开发不用从头开始(库函数)。2. 模块化的思想 。 大问题分解成小问题逐个解决。设计函数 高内聚低耦合。 功能越单一越好 对外部依赖越少越好。函数在使用前需要先定义(告诉编译器有这个功能)再使用。 定义时包含(声明)函数的定义函数返回值 函数名(参数类表){函数体return x}参数列表 (数据类型 形式参数1,数据类型 形式参数2数据类型 形式参数3...)函数返回值 数据类型 函数在调用完毕后一般情况都是有结果值。 这个值就有数据的类型 。 如果函数的返回值 设计为void 那么函数调用(使用)后没有结果也就没有数据1. 如果设计函数的时候没有给定函数返回值的 默认是int 。如果确实没有什么需要返回的可以是void 。2. 如果函数的执行流程运行到return 是返回到函数的调用处。 return后的代码将不会被执行。3. 参数在传递的过程中需要保证参数的个数一致类型 匹配类型一致或可以隐式类型转换//函数的定义实现具体int add(){int a 20;int b 10;int ret ab;return ret; // 返回结果返回函数调用的地方。}int main(){int result add(); // 函数的使用,() 表示调用函数 int result ret; intresult 30;printf(result is %d\n,result);return 0;}函数的调用void fun1(){}void fun2(int arg1,int arg2) 形参形式参数{}函数后面的圆括号不可以省略。函数名(); // fun1();int a0, int b20 ;// 参数个数一致 数据类型也一致。函数名(arg1,arg2); // fun2(a,b); 实参实际参数//函数的定义 实现具体int add(){int a 20;int b 10;int ret ab;return ret; // 返回结果返回函数调用的地方。}int main(){int result add(); // 函数的使用,() 表示调用函数 int result ret; intresult 30;printf(result is %d\n,result);return 0;}主调函数在这个示例中main 是主调函数。调用功能的发起者。被调函数 在main中使用add的功能add 就是被动调用的函数。函数的声明在实际代码编写过程。没有办法保证 函数的定义一定在函数的调用前出现 (多文件编程)。编译器在编译的过程中就会出现未登记函数就会警告。为了避免这种情况 就要对函数进行声明int add(int a,int b) //声明int main(){....add(12,4*5); // 函数的调用但是函数的定义在后面定义的这时 会出现警告。....}int add(int a,int b){return ab;}int add(int a,int b) 函数的原型函数头。 包含函数名参数列表(参数的个数,每个参数的数据类型) 返回值的数据类型。变量的作用域和生命周期作用域变量定义后可以被访问的区域。局部作用域 局部变量变量作用域在离定义该变量最近的大括号内。当发生函数调用后作用域发生了变化在被调函数内部在主调函数内部定义的变量都不能使用。#include stdio.hint add(){return ab; // 不能访问到主调的 a,b 变量 。}int main(){int a 10; //局部作用域int b 20;//局部作用域int c add();return 0;}全局作用域 全局变量在所有的源文件( 同一个工程中 所有.c) , 在任意位置都可以直接使用的区域。变量的定义放在所有函数的外面。 就是全局变量int a 10; // 全局变量 整个工程中任意位置都可以被访问。int b 20;int add(){return ab;}int main(){int c add();printf(c is %d\n,c);return 0;}生命周期定义变量从开辟内存空间开始 到 变量的内存空间的回收 结束 的这个时间段被称为生命周期。局部变量的生命周期1. 函数内部定义的变量2. 函数的参数3. 函数内部定义的变量一定要给初值。如果没有给就是随机值在定义开始的地方申请内存。 执行到函数结束空间回收。全局变量的生命周期1.在所有函数之外定义的变量。2. 可以给初值。如果不给初值 由系统负责初始化为0 全局变量在a.out 正式运行起来前就要把空间开辟好在程序结束后空间释放 。全局变量有全局生命周期。在同一个作用域中标识符(变量名数组名函数名) 不能同名。如果一个作用域大一个作用域小出现同名标识符。 出现隐藏。变量的隐藏int a 10;int b 20;int add(){return ab;}int main(){int a 1;int b 3;int c add();int d ab; // 这个地方使用的是局部变量。全局变量被隐藏。printf(c is %d\n,c);return 0;}变量的存储类型存储类型 数据类型 变量名1. auto int a; 用的相对少2. register int b; 用的相对少3.extern int c;4.static int d;1. auto,自动存储类型 。 局部变量。 这个关键字 可以省略 。定义变量时内存空间自动开辟离开作用域时自动释放。内存的栈区(stack)。 函数内部定义的变量函数的参数。2. register寄存器 . 建议编译器把某个变量存储在cpu的寄存器中。register int c;3. extern外部变量。 声明。 导出目的是为了让其他的源文件可以使用1.c#include stdio.hextern int a; // 声明表示有这个变量在其他的.c 中extern int b;extern void fun();int main(){int c ab;printf(ab %d\n,c);fun();}2.cint a 10;// 定义开辟内存空间int b 20;void fun(){}gcc 1.c 2.c4.static 静态的可以修饰变量或函数。 用static 修改的变量内存的数据区static 修改局部变量如果局部变量前加 static 变量的生命周期是整个程序运行的周期但作用域不变。第一运行fun函数时 i 分配空间初始化。 如果不是第一次运行这个变量 就不会在分配空间和初始化。相当于 static int i 0这段没有 了。int fun(){static int i 0 ;// 全局生命周期i;return i;}int main(){int num 0;printf(input num);scanf(%d,num);int j 0 ;int count 0 ;for(j0;jnum;j){count fun();}// i 20; //errror 不能访问i。 i本身是存在但是没在i的作用域范围内。printf(count is %d\n,count);return 0;}static 修饰全局变量表示 这个变量只能在本模块(本源文件中 依然全局变量)中使用。其他的源文件 不可以使用。 static 的作用 限制作用域。static 修饰函数static 的作用 限制作用域。 避免函数重名5. a.out 运行起来后的内存分布图

相关文章:

C语言(8) 函数

第五章 函数一段功能代码,被称为函数1. 为了避免代码的重复。 复用性。 开发不用从头开始(库函数)。 2. 模块化的思想 。 大问题,分解成小问题,逐个解决。 设计函数 ,高内聚,低耦合。 功能越单一越好 ,对外…...

半导体制造中OPC技术与蚀刻偏差的挑战与创新

1. 半导体制造中的OPC技术演进与蚀刻偏差挑战在28nm及更先进制程节点中,光学邻近效应校正(OPC)技术面临着前所未有的精度挑战。我曾在某次技术攻关中亲眼见证:当特征尺寸缩小到40nm以下时,单纯的光学模型校正误差会突然呈现非线性增长。这种现…...

手把手教你用PyTorch复现EfficientNetV2(附完整代码):从网络搭建到渐进式训练全流程

从零实现EfficientNetV2:代码级解析与渐进式训练实战 当你第一次翻开EfficientNetV2论文时,那些复杂的复合缩放系数和渐进式训练策略可能让人望而生畏。但别担心——本文将带你用PyTorch从最基础的卷积模块开始,逐层构建这个高效的视觉模型。…...

(B站TinyML教程学习笔记)C8 edge impulse 快速入门+C9 数据提取+C10 运动数据的特征提取

0:06 - 1:00 为什么使用 Edge Impulse 常见机器学习开发方式 传统机器学习通常会使用: TensorFlowScikit-learn 这些框架功能强大,但: 学习成本高需要写大量代码对嵌入式开发者不太友好 Edge Impulse 的作用 Edge Impulse 核心特点&am…...

2002-2024年 人工智能发展能壮大耐心资本吗

本文基于2002-2024年上市公司数据,借鉴《人工智能发展能壮大耐心资本吗? ——来自国家新一代人工智能创新发展试验区的经验证据》一文中的变量构建与基准回归部分,探讨人工智能发展能否培育壮大耐心资本,含原始数据、处理代码、实…...

1986-2025年上市公司高校专利知识溢出

高校专利知识溢出,是衡量企业所处省份外部知识环境与高校创新资源外溢程度的重要指标。对于企业尤其是技术密集型企业而言,其创新活动不仅依赖内部研发投入,也深受所在地区知识基础、科研资源和学术创新氛围的影响。高校作为基础研究和前沿技…...

一次讲清本地大模型语音识别三件套:Vulkan 为什么是加速主线,而说话人识别为何成为唯一短板

把 whisper.cpp、sherpa-onnx、llama.cpp 三套引擎整合到一起,再用 Electron 包成桌面应用,这个技术思路本身并不复杂。真正考验工程功力的,是面向完全不懂技术的最终端用户,怎样让这些引擎尽可能“一键加速”,同时还不…...

西门子“工业软件驱动的数字孪生”模式

西门子(Siemens)的“工业软件驱动的数字孪生”模式是全球离散制造业(如汽车、航空航天、电子)公认的技术制高点。其核心逻辑不是简单的 3D 建模,而是“数物融合”,即利用完整的软件工具链在物理实体投产前&…...

2026深度教程:如何用好 Gemini 3.1 Pro 联网搜索?实时信息获取与验证技巧全解析

目前,国内用户想稳定使用顶尖AI模型的联网搜索功能,像聚合了Gemini、ChatGPT、Grok等主流大模型的 KULAAI (m.877ai.cn) 这类镜像站提供了直接可用的方案。本文将深入剖析Gemini 3.1 Pro的联网能力,从原理机制到实操技巧&#xff…...

基于TEA加密的QQ号码逆向查询技术实现

基于TEA加密的QQ号码逆向查询技术实现 【免费下载链接】phone2qq 项目地址: https://gitcode.com/gh_mirrors/ph/phone2qq 在数字身份管理领域,用户经常面临忘记QQ号码但记得绑定手机号的情况。传统找回方式依赖官方验证流程,耗时较长且操作复杂…...

Taotoken模型广场在项目技术选型阶段提供的便利性体验

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken模型广场在项目技术选型阶段提供的便利性体验 启动一个新的AI项目时,技术决策者面临的首要挑战往往是模型选型…...

客户受电工程图纸审核|全网独家复现,多模态+知识图谱创新改进篇 引入MM-KG融合架构,多模态感知+知识关联助力图纸全检、隐患精准定位、审核效率翻倍

目录 一、行业痛点:人工抽检模式的致命瓶颈(附真实场景痛点) 1.1 审核效率极低,无法适配规模化需求 1.2 漏判误判率高,审核质量依赖个人经验 1.3 审核标准不统一,追溯难度大 1.4 人力成本高昂,专业人才缺口大 二、创新突破:多模态+知识图谱融合架构(核心改进解析…...

DownKyi哔哩下载姬:5步快速掌握B站视频下载完整教程

DownKyi哔哩下载姬:5步快速掌握B站视频下载完整教程 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等&#xf…...

【Mem0】 源码剖析(一):Agent 的记忆危机与 Mem0 的三阶段管道——为什么 RAG 不够用?

【Mem0】 源码剖析(一):Agent 的记忆危机与 Mem0 的三阶段管道——为什么 RAG 不够用? 写在前面:54K Star,论文被 arXiv 收录,LOCOMO 基准 SOTA——Mem0 是当前 Agent 记忆层的事实标准。它的核…...

【Flutter for open harmony 】Flutter三方库Dio网络请求+熬夜记录列表的鸿蒙化适配与实战指南

【Flutter for open harmony 】Flutter三方库Dio网络请求熬夜记录列表的鸿蒙化适配与实战指南 欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net 大家好,我是ShineQiu,上海某高校计算机科学与技术专业大二在读学生。这…...

5分钟快速上手:res-downloader 全网资源下载神器终极指南

5分钟快速上手:res-downloader 全网资源下载神器终极指南 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 你是否经…...

分类记单词:哺乳动物

分类记单词:哺乳动物快来记单词,这里有好多哺乳动物哦一、宠物、家畜 pet 宠物cat 猫tom 公猫;汤姆dog 狗pup 小狗bitch 母狗;泼妇pig 猪sow 母猪;播种boar 未阉的公猪;野猪piglet 小猪livestock 牲口cattl…...

蓝牙6.0 Channel Sounding 基于接入地址的定时估计原理

基于接入地址的定时估计 先看下core spec的描述:蓝牙Core Spec Vol 6 Part H中 3.2节「基于接入地址的定时估计」,它定义了两种用于CS_SYNC包到达时间(ToA)估计的方法,是RTT测距的基础定时方案。下面我逐段拆解&#x…...

凡亿AD22--器件导线连接及导线属性设置

一、课前基础授课前已完成:将所需元器件(如DC头、二极管、电容等)按布局要求,放置在原理图页面中,无需提前连接,本节课重点完成「电气连接」及导线属性优化。二、核心重点:导线连接(…...

职慧AI陪练产品全景解析:六大训练模式如何覆盖销售培养全场景

摘要:市面上的AI陪练产品大多只能做"话术对练",真正能覆盖销售能力培养全链路的产品长什么样?本文深度拆解职行力职慧AI陪练的六大训练模式——话术陪练、情景对话、智能考试、微课学习、AI专家问答、训练官带教,以及背…...

凡亿AD22--原理图元件复制、剪切、旋转、镜像

核心作用:这4种操作是原理图布局的基础,熟练掌握可大幅提升绘制效率,让元器件布局更规范、信号流向更清晰,提升原理图可读性。一、核心操作详解所有操作均基于「选中元件」为前提(单个元件点击选中,多个元件…...

凡亿AD22-原理图页大小设置及注意事项(实操笔记)

核心前提:原理图页大小需在绘制元器件、导线前设置(前期准备工作),避免绘制完成后调整尺寸,导致元器件、导线布局混乱,节省后期调整时间。一、为什么要设置原理图页大小?软件默认的原理图页尺寸…...

Gemini3.1Pro透明化指南:模型卡与数据卡入口解析

在 2026 年,越来越多的团队开始把“模型怎么用”升级为“模型用得是否可控、可追溯”。尤其是涉及合规审计、数据治理与风险评估时,工程侧最需要的往往是:能快速找到模型信息与数据来源的透明化页面入口,确保链路清晰、记录完整、…...

算法23,寻找峰值

这是一道经典的二分查找应用题:寻找峰值(Find Peak Element)。笔记中已经总结了核心逻辑,我将为你梳理其背后的数学原理(二段性),并提供标准的代码实现。1. 核心原理:什么是“二段性…...

Proxmox VE – 修复 LVM Thin Pool “pve/data” 激活失败

逐步诊断与恢复操作指南适用范围:PVE 宿主机,LVM thin pool pve/data 状态异常,错误信息: TASK ERROR: activating LV pve/data failed: Check of pool pve/data failed (status:1). Manual repair required! 风险提示&#xff1a…...

全球扩张加剧法律复杂性,但仅有7%的企业实现全面合规

• 47%的总法律顾问表示,实际控制人规则对法律运营构成了最大的风险 • 44%的企业对能否满足跨境数据安全要求缺乏信心 随着企业在2026年加速全球扩张,合规工作却未能跟上步伐。事实上,根据全球领先的商业管理与合规解决方案提供商CSC的一项最…...

模板进阶(C++初阶结束)

1.非类型模板参数模板参数分为类型形参和非类型形参类型形参:出现在模板参数列表中,跟class或者typename之类的参数类型名称非类型形参:就是用一种常量作为类(函数)模板的一个参数,在类(函数&am…...

七、数据与存储

一、 数据库操作 1、QSqlDatabase 连接管理深度剖析 连接生命周期与内部机制 QSqlDatabase 的连接管理不走寻常路——它内部是一个全局静态哈希表,存储着所有命名连接。这带来了几个重要的设计约束: // QSqlDatabase 内部实现的核心数据结构(简化还原)// Qt 源码中通过 QH…...

iVentoy(增强版PXE服务器

链接:https://pan.quark.cn/s/d2ca56327274iVentoy是一个增强版的PXE服务器。你可以通过网络同时为多台机器启动和安装操作系统。软件的使用非常简单,无需复杂的配置。只需要直接将ISO文件放在指定的位置,然后在启动时,客户机可以…...

数据结构(哈希函数)

#pragma once //之前已经学完的,顺序表,链表等 他们总是有一个共有的特征,数据和其存储之间是没有任何关系的 //现在的需求 让查找函数的时间复杂度达到O(1); //让数据和其存储位置之间产生某种函数(映射)关系 这就是哈…...