嵌入式从0到精通——C语言函数(二)
一、函数与一维字符型数组定义返回值 函数名int 数组名[], int len{// sizeof(数组名) ----》sizeof(int *) ----8字节//外面数组怎么使用函数内数组就怎么使用}调用函数名(数组名 数组长度);void print_array(int a[], int len){}print_array(a, len);数组的数组名是数组的首元素地址。传参注意一维字符型数组作为函数参数传递时只需要传递数组即可不需要传递长度因为字符型数组保存的字符串末尾有\0结束标志。数组作为函数参数传递时本质传递的是数组的首元素地址在被调函数中sizeof(数组名形参)---本质求地址在计算机内存中的大小。练习封装 mystrlen 函数返回数组中有效字符的个数封装 mystrcpy 函数将源字符型数组中的元素拷贝到目标字符型数组。void mystrcpy(char dst[], char src[]);封装 mystrcat 函数将源字符型数组中的元素拼接到目标字符型数组元素后边void mystrcat(char dst[], char src[]);封装 mystrcmp 函数实现两个字符串的比较返回0 , 0, 0二、函数和二维整型数组传参注意二维整型数组传参时形参必须说明是二维数组行数可以省略列数不能省略。char 数组名[100];定义返回值 函数名(char 数组名[]){函数体}调用函数名(数组名);void print_str(char str[]){}print_str(str);定义返回值 函数名int 数组名[][列数]int 行数{}调用函数名(数组名行数)int a[3][4] {0};void print_2D_array(int a[][4], int hang){}printf_2D_array(a, sizeof(a)/sizeof(a[0]));形参int a[][列数]在自定义的函数中行数无法计算所以可以通过参数的方式传递在自定义的函数中列数可以计算sizeof(a[0]) / sizeof(a[0][0]);三、函数和二维字符型数组传参定义返回值 函数名(char 数组名[][列数], int 行数){}调用函数名(数组名 行数);char str[3][100] {0};void print_2DC_array(char str[][100], int hang){}print_2DC_array(str, 3);四、变量的作用域和生命周期1. 标识符作用域空间角度作用域标识符/变量可以被使用的范围局部作用域在{}内部被定义的变量的作用范围局部变量定义在局部作用域中的变量函数内部定义的变量、函数形参全局作用域可使用范围在全局{}外面。比如定义函数全局变量定义在全局作用域的变量。注意标识符必须先定义再使用。在相同作用域中不能定义同名标识符变量、函数。在具有包含关系的作用域中出现了同名标识符外层标识符在内层不可见就近原则2. 变量的生命周期时间角度变量的生命周期从变量的空间开辟到空间回收对应的生存期。动态生命周期局部变量在被定义的时候开辟空间超出其作用域范围空间被回收。静态生命周期和程序运行的生命周期一样长全局变量从程序运行之前空间开辟程序运行结束空间被回收。static 修饰的静态变量从程序运行之前空间开辟程序运行结束空间被回收。1. 作用域没发生变化局部作用域。2. 生命周期变为静态生命周期。总结局部变量作用域在局部超出局部作用域无法访问动态生命周期定义时开辟空间超出作用范围空间被回收局部变量保存在栈区未被初始化为随机值。全局变量/static 静态变量全局变量作用域在全局static 静态变量作用域在局部静态生命周期程序运行之前空间开辟程序运行结束空间被回收全局变量/static 静态变量保存在数据区。全局变量/static 静态变量未被初始化时默认为 0。未初始化的全局变量/static 静态变量存储在 .bss 段.bss 段系统默认清 0。已初始化的全局变量/static 静态变量存储在 .data 段。五、变量的存储类型变量的存储类型auto默认存储类型staticstatic 修饰局部变量静态变量具备静态生命周期延长局部变量的生命周期。static 修饰函数该函数只允许在当前原文件中被调用。static 修饰全局变量该变量只允许在当前文件中使用。register寄存器变量。int a存储类型 数据类型 变量名register 修饰变量时建议编译器将该变量存储在寄存器中。register int i 0;register 仅仅是一个建议。int *p;extern修饰全局变量/函数声明。extern 修饰全局变量用来声明全局变量表示允许被外部的 .c 使用。extern 声明函数表示该函数允许被外部的 .c 使用。

相关新闻

Python零基础实战入门:从环境搭建到数据分析与爬虫项目

Python零基础实战入门:从环境搭建到数据分析与爬虫项目

在实际编程学习过程中,很多人会陷入一个误区:认为只要看完了海量的视频教程,就能快速掌握一门语言。特别是面对像“600集”、“最全最细”、“7天精通”这类标题时,很容易产生不切实际的期待。Python作为一门语法简洁、生态丰富的…

2026/8/3 8:41:46阅读更多 →
synchronized 完整复盘,特性 + 用法 + 锁升级全拆解

synchronized 完整复盘,特性 + 用法 + 锁升级全拆解

📚 目录 1. synchronized 核心特性 1.1 JMM 三大保障:原子性、可见性、有序性1.2 可重入性锁1.3 自动释放锁1.4 非公平锁、不可中断 2. synchronized 四种使用方式 2.1 修饰普通成员方法 2.2 修饰同步代码块2.3 修饰 static 静态方法2.4 代码块锁定 Cl…

2026/8/3 8:39:45阅读更多 →
Python自学路线图:从核心语法到实战项目,避开教程陷阱

Python自学路线图:从核心语法到实战项目,避开教程陷阱

如果你在B站、抖音或者各种学习平台,看到过类似“冒死上传!花7980买的Python全套教学视频,七天从小白到大神!”这样的标题,大概率会心头一热,然后点击收藏。但收藏夹吃灰几个月后,你可能会发现&…

2026/8/3 8:39:45阅读更多 →
Go语言内容处理机制与性能优化实战

Go语言内容处理机制与性能优化实战

1. Go语言中的content处理机制解析在Go语言开发中,content(内容)处理是一个高频且核心的操作场景。无论是处理HTTP请求体、文件内容还是内存数据流,都需要开发者熟练掌握Go标准库提供的content相关接口和设计模式。本文将从实际项…

2026/8/3 10:03:03阅读更多 →
3分钟掌握InfiniteTalk:免费创建无限时长AI对话视频的终极指南

3分钟掌握InfiniteTalk:免费创建无限时长AI对话视频的终极指南

3分钟掌握InfiniteTalk:免费创建无限时长AI对话视频的终极指南 【免费下载链接】InfiniteTalk ​​Unlimited-length talking video generation​​ that supports image-to-video and video-to-video generation 项目地址: https://gitcode.com/gh_mirrors/in/In…

2026/8/3 10:03:03阅读更多 →
SpringBoot+Vue疾病防控系统架构设计与优化实践

SpringBoot+Vue疾病防控系统架构设计与优化实践

1. 项目概述:疾病防控系统的技术架构与核心价值这个基于SpringBootVueMyBatisMySQL的疾病防控综合系统,是当前公共卫生信息化建设的典型解决方案。我在参与某地级市疾控中心数字化改造时,发现传统单体架构存在响应慢、维护难、扩展性差三大痛…

2026/8/3 10:03:03阅读更多 →
零基础实战Codex:从环境搭建到项目集成的完整指南

零基础实战Codex:从环境搭建到项目集成的完整指南

如果你在B站、GitHub或技术社区看到过“Codex”相关的教程,大概率会陷入两种困惑:要么是零散的代码片段演示,看完依然不知道如何系统性地应用到自己的项目中;要么是过于理论化的介绍,缺少从环境搭建到真实问题解决的完…

2026/8/3 10:03:03阅读更多 →
Unity光线追踪实战:从原理到实现,打造模块化学习范例

Unity光线追踪实战:从原理到实现,打造模块化学习范例

1. 项目概述:当Unity遇见光线追踪,一颗“钻石”的诞生如果你是一名Unity开发者,或者对实时渲染技术有所涉猎,那么“光线追踪”这个词对你来说一定不陌生。它早已不是电影工业的专属,而是正以前所未有的速度渗透到游戏和…

2026/8/3 10:03:03阅读更多 →
杰理之双备份测试盒无线升级更新不了ANC参数问题【篇】

杰理之双备份测试盒无线升级更新不了ANC参数问题【篇】

替换下面的库rebuild,并且需要重复进行两次无线升级

2026/8/3 10:01:02阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/3 0:29:53阅读更多 →
限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

更多请点击: https://intelliparadigm.com 第一章:AI模板批量生成的核心价值与落地全景 AI模板批量生成正从实验性工具演进为现代软件工程的关键基础设施。它通过语义理解、上下文感知与结构化约束,将重复性高、模式明确的代码/文档/配置生成…

2026/8/3 0:33:53阅读更多 →
如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南 【免费下载链接】web-archives Browser extension for viewing archived and cached versions of web pages, available for Chrome, Edge and Safari 项目地址: https://gitcode.com/gh_mirrors/we/web-a…

2026/8/3 0:20:37阅读更多 →
3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南

3个让你工作效率翻倍的Umi-OCR实战技巧:免费离线文字识别完全指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。…

2026/8/3 0:00:32阅读更多 →
[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

[具身智能-181]:PC+服务器+具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构

PC服务器具身机器人:构建具身智能从仿真到量产的闭环迭代混合架构一、前言:具身智能需要“混合算力闭环系统”传统人工智能依赖云端静态数据集训练,不具备物理交互能力,无法适应真实世界的不确定性。具身智能(Embodied…

2026/8/3 0:00:32阅读更多 →
[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

[具身智能-181]:大分布式通信模型对比:看懂为什么 DDS 是 ROS2 底层通信最优解

前言构建机器人、具身智能这类分布式实时系统,通信底座直接决定整套系统的实时性、容错性、组网能力。分布式领域长期存在 4 类经典通信架构:点对点模式、Broker 中间代理模式、广播模式、以数据为中心(DDS)模式。很多开发者疑惑&…

2026/8/3 0:00:32阅读更多 →
无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 在数字媒体创作领域,视频编辑处理的质量损…

2026/8/3 2:32:59阅读更多 →
AI辅助本科论文写作:8大工具评测与高效使用指南

AI辅助本科论文写作:8大工具评测与高效使用指南

1. 本科生论文写作的AI辅助现状本科毕业论文是每个大学生必须跨越的一道坎。记得我当年写论文时,光是文献检索就花了整整两周时间,打印的参考文献堆满了半个书桌。如今AI技术的发展为学术写作带来了革命性变化,合理使用这些工具可以节省80%以…

2026/8/3 2:33:01阅读更多 →
如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到热门演唱会门票…

2026/8/3 2:33:04阅读更多 →