嵌入式学习Day11 C语言 --- 数组作为函数的形参、标识符的作用域与生命周期
一、数组作为函数的形参1.一维整形数组做函数形参//形式上void printArray(int a[],int len);//实际上void printArray(int *a,int len); //指针的形式2.一维字符型数组做函数形参//形式上void printStr(char s[]); //字符串有结束标志//实际上void printStr(char *s); //字符串有结束标志3.二维整形数组做函数的形参形式上: //形参 --数组形式行数void printArray(int a[3][4],int row);实际上void printArray(int (*a)[4],int row); //编译器 的最终解释实参:printArray(a,row); //数组名 行数int a[3][4] ---int a[][4]int[4] a[]练习定义一个二维整型数组实现一个函数对二维数组元素求和4.二维字符型数组做函数形参:char s[3][10] {hello,world,china};形式上void printStr(char s[][10],int row) //注意需要传行数因为操作多个字符串本质上:void printStr(char (*s)[10],int row)实参printStr(s,row); //数组名 行数练习:准备3个字符串实现函数 找出最大值练习:准备3个字符串排序二、标识符的作用域和可见性问题生命周期栈中存储局部变量函数内部定义的变量其作用域仅限于该函数。比如在一个C语言函数中定义的整型变量 int num 10;当函数被调用时这个变量就会被压入栈中。函数执行结束后这些局部变量所占的栈空间会被释放。函数形参函数调用时传递的参数也会被保存到栈里。例如在调用 func(int a, int b) 函数时实参的值会被复制到栈上传递给函数这样函数内部就可以使用这些参数进行运算。返回地址记录函数调用结束后要返回的程序位置。当一个函数调用另一个函数时会把当前函数的下一条指令地址压入栈中被调用函数执行完毕后会根据栈中保存的返回地址返回到原函数继续执行。中断上下文程序状态在发生中断如硬件中断、软件中断时会把当前程序的状态信息如寄存器的值保存到栈中。以微处理器为例当中断发生时会将程序计数器PC、状态寄存器等的值压入栈。中断处理程序执行完后再从栈中恢复这些信息使程序能够从中断处继续执行。堆区在操作系统为进程分配的内存空间里堆区是其中一部分。它由程序员手动管理用于动态分配内存。与栈区由系统自动分配和释放内存不同堆区为程序提供了更灵活的内存使用方式允许程序在运行时根据实际需求来决定分配和释放内存的时机和大小。使用malloc()、calloc()和realloc()等函数来请求操作系统分配指定大小的内存块。使用free()函数来释放之前用malloc()等函数分配的内存。如上述C语言代码中在使用完arr后需要添加free(arr);来释放内存。作用域:作用的范围局部变量 --- 一定在某一个{} 范围内全局变量 --- 不在任何一个{} 范围内可见性:程序运行到某个点哪些标识符可见标识符的可见性的规则:1.先定义后使用2.同一作用域中不能有同名标识符3.在不同的作用域同名标识符相互之间没有影响4.如果是不同的作用域但是作用域之间存在嵌套关系,则 内层的作用域的同名标识符会屏蔽外层的作用域的同名标识符(就近原则)生命周期:动态变量(局部变量的 (生命周期):从定义的语句开始到所在的作用域范围结束eg:栈上的是局部变量 自动申请 自动释放 全局区(静态区)上的是 静态变量 (全局变量)从程序一开始运行就存在直到程序结束时销毁注意:全局变量(静态变量)1.不能用变量进行初始化,只能常量初始化 int a 10; //true int b a;//error2.静态区的变量只会被初始化一次 int a ; a 10; //error int a 10; //true int a; //truefor(i 0;i 3;i) { static int b 0; b; printf(b %d,b); //打印三次分别是 b 1,b 2,b 3 }3.值具有 继承性auto int a; //这个是一个自动变量 --- 栈上开辟的变量static int a; //静态区//修饰的是 局部变量register int a; //CPU 寄存器//建议性考点:不能 (取地址)因为是cpu内部的寄存器取地址运算是取得内存的地址register int i; 将变量存储在寄存器中提高访问速度for( i 0; i 100000000; i){}extern int a; //扩展 延伸//表示 此时这个a 不是在当前文件中定义的 //如果要用请到别的文件中寻找//多文件编程//一般使用在多文件编程中://如果想在当前文件使用别的文件中的 全局变量 //此时可以使用//extern int a; //做声明//相当于把别的文件中的变量作用域扩展到当前文件//全局变量前面static 修饰局部变量//将局部变量 存储在了 全局区(静态区)//将局部变量的生命周期延长 作用域不变 //只能被初始化一次#include stdio.h void function() { static int counter 0; // 使用 static 修饰的局部变量 counter; printf(Counter: %d\n, counter); } int main() { function(); // 第一次调用 function 函数 function(); // 第二次调用 function 函数 function(); // 第三次调用 function 函数 return 0; }在上述代码中function 函数内部定义了一个 static 局部变量 counter 并初始化为 0。当第一次调用 function 函数时counter 被初始化为 0然后递增为 1 并输出。当第二次调用 function 函数时counter 不会再次被初始化为 0而是保持上一次调用后的值 1然后递增为 2 并输出。同样第三次调用时counter 保持上一次的值 2递增为 3 并输出static 修饰全局变量//表示 将全局变量 的作用域限定到本文件中//别的文件中不能extern了extern 可以放在函数声明中 --函数声明//表示的意思 --将函数作用域扩展到当前文件static 加在函数前面// 此时效果与修饰全局变量效果一样// 将函数作用域限定到本文件中面试题:1.你知道static吗?

相关新闻

告别激活弹窗:一个.bat脚本如何同时摆平Windows与Office

告别激活弹窗:一个.bat脚本如何同时摆平Windows与Office

告别激活弹窗:一个.bat脚本如何同时摆平Windows与Office 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO KMS_VL_ALL_AIO 这个开源脚本,把"系统激活"压缩成了一…

2026/8/18 13:25:16 阅读更多 →
douyin-downloader 批量下载实战指南:200 个视频,从两小时缩到八分钟

douyin-downloader 批量下载实战指南:200 个视频,从两小时缩到八分钟

douyin-downloader 批量下载实战指南:200 个视频,从两小时缩到八分钟 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, a…

2026/8/18 13:25:16 阅读更多 →
百度文库文档提取实测:1 个脚本 5 分钟免费搞定全文保存

百度文库文档提取实测:1 个脚本 5 分钟免费搞定全文保存

百度文库文档提取实测:1 个脚本 5 分钟免费搞定全文保存 【免费下载链接】baidu-wenku fetch the document for free 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wenku baidu-wenku 是个专做百度文库文档提取的开源脚本:纯前端、零安装&…

2026/8/18 13:24:16 阅读更多 →

最新新闻

如何用 iptv-proxy 代理 Xtream Codes 服务:直播、VOD、剧集一网打尽

如何用 iptv-proxy 代理 Xtream Codes 服务:直播、VOD、剧集一网打尽

如何用 iptv-proxy 代理 Xtream Codes 服务:直播、VOD、剧集一网打尽 【免费下载链接】iptv-proxy Reverse proxy on iptv m3u and m3u8 file and xtream codes client api 项目地址: https://gitcode.com/gh_mirrors/ip/iptv-proxy 如果你正在寻找一个简单好…

2026/8/19 19:48:14 阅读更多 →
用 Rabel 运营活跃社区:广告位、自定义页面与侧边栏模块技巧

用 Rabel 运营活跃社区:广告位、自定义页面与侧边栏模块技巧

用 Rabel 运营活跃社区:广告位、自定义页面与侧边栏模块技巧 【免费下载链接】rabel An open-source web forum built on the Ruby on Rails framework. 项目地址: https://gitcode.com/gh_mirrors/ra/rabel Rabel 是一个基于 Ruby on Rails 框架构建的开源社…

2026/8/19 19:48:14 阅读更多 →
告别卡顿邮件客户端:用SnappyMail轻松自建网页版邮箱的完整实战

告别卡顿邮件客户端:用SnappyMail轻松自建网页版邮箱的完整实战

告别卡顿邮件客户端:用SnappyMail轻松自建网页版邮箱的完整实战 【免费下载链接】snappymail Simple, modern & fast web-based email client 项目地址: https://gitcode.com/gh_mirrors/sn/snappymail 每天打开邮箱要等三五秒、界面堆满广告与追踪脚本、…

2026/8/19 19:48:14 阅读更多 →
长芯微LPA4530完全P2P替代ADA4530,微微安输入偏置电流静电计放大器

长芯微LPA4530完全P2P替代ADA4530,微微安输入偏置电流静电计放大器

描述 LPA4530运算放大器具有飞秒级输入偏置电流。它的工作电压为4.5 V至16 V(2.25 V至8 V),除了包括接地的输入共模范围外,还具有轨对轨输出摆动功能。集成保护缓冲器将输入引脚与印刷电路板中的泄漏隔离开来。它最大限度地减少了…

2026/8/19 19:48:14 阅读更多 →
番茄小说下载保存到本地:一个免费开源工具,把整本书搬进硬盘

番茄小说下载保存到本地:一个免费开源工具,把整本书搬进硬盘

番茄小说下载保存到本地:一个免费开源工具,把整本书搬进硬盘 【免费下载链接】fanqienovel-downloader 下载番茄小说 项目地址: https://gitcode.com/gh_mirrors/fa/fanqienovel-downloader 想象这样一个晚上:你窝在沙发里&#xff0c…

2026/8/19 19:48:14 阅读更多 →
纯CPU也能跑3D?一文拆解SwiftShader渲染引擎的搭建与提速之路

纯CPU也能跑3D?一文拆解SwiftShader渲染引擎的搭建与提速之路

纯CPU也能跑3D?一文拆解SwiftShader渲染引擎的搭建与提速之路 【免费下载链接】swiftshader SwiftShader is a high-performance CPU-based implementation of the Vulkan graphics API. Its goal is to provide hardware independence for advanced 3D graphics. …

2026/8/19 19:47:14 阅读更多 →

日新闻

【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/19 0:00:30 阅读更多 →
AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

1. 项目概述:当AI开始“猜”数学定理 最近在AI研究圈里,一个名为“Moonshine”的项目引起了不小的讨论。这名字本身就挺有意思,直译是“月光”,但在数学史上,它特指一个神秘而美丽的联系——魔群月光猜想,连…

2026/8/19 0:00:30 阅读更多 →
WarcraftHelper 魔兽争霸3优化实战指南

WarcraftHelper 魔兽争霸3优化实战指南

WarcraftHelper 魔兽争霸3优化实战指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 一台刚配的新电脑,跑《魔兽争霸3》却卡成 PPT——这…

2026/8/19 0:02:31 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/19 11:55:18 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/19 9:46:27 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/19 11:55:16 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/19 5:04:55 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/19 7:42:22 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/19 11:55:13 阅读更多 →