news 2026/8/2 4:06:11

嵌入式开发学习日志(函数传递一维 / 二维数组、变量作用域 生命周期、内存分区) day11 持续更新中

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
嵌入式开发学习日志(函数传递一维 / 二维数组、变量作用域 生命周期、内存分区) day11 持续更新中

一、函数和一维字符型数组(字符串数组)

1. 传参语法

//函数定义 返回值 函数名(char 数组名[]) { 函数体; } //函数调用 函数名(数组名);

示例:

void print_str(char str[]) { } print_str(str);

2. 核心注意点

  1. 一维字符数组(字符串)传参不需要额外传递长度,依靠字符串末尾'\0'判断结束;

  2. 数组作为函数参数传递,本质传递数组首元素地址; 在被调函数内sizeof(形参数组名)得到的是指针大小,无法计算数组长度。

练习(字符串四大模拟函数)

  1. mystrlen:自定义函数,统计字符串有效字符个数

  2. mystrcpyvoid mystrcpy(char dst[], char src[]);字符串拷贝

  3. mystrcatvoid mystrcat(char dst[], char src[]);字符串拼接

  4. mystrcmp:自定义字符串比较,返回 >0、0、<0


二、函数和二维整型数组

1. 传参语法

//函数定义 返回值 函数名(int 数组名[][列数], int 行数) { } //调用 函数名(数组名, 行数);

示例:

int a[3][4] = {0}; void print_2D_array(int a[][4], int hang) { } print_2D_array(a, sizeof(a)/sizeof(a[0]));

2. ⭐

  1. 二维数组形参:行数可以省略,列数绝对不能省略正确:int a[][4];错误:int a[3][]

  2. 在自定义函数内部,无法通过 sizeof 计算总行数,行数必须通过参数传入;

  3. 列数可以在函数内计算:

  4. int lie = sizeof(a[0]) / sizeof(a[0][0]);


三、函数和二维字符型数组(存放多个字符串)

1. 传参语法

//定义 返回值 函数名(char 数组名[][列数], int 行数) {} //调用 函数名(数组名, 行数);

示例:

char str[3][100] = {0}; void print_2DC_array(char str[][100], int hang) { } print_2DC_array(str, 3);

本质规则和二维整型数组一致:必须指定每行字符串最大长度(列数)。

易错提醒

❌ 不能直接对二维字符数组整体使用strcpy; ✅ 只能循环逐行调用strcpy,每行str[i]才是合法字符串。


四、变量的作用域(空间角度:哪里能访问)

作用域:变量 / 标识符能够被访问、使用的代码范围。

  1. 局部作用域{ }内部

    1. 局部变量:函数内定义变量、函数形参;仅大括号内可用。

  2. 全局作用域:所有函数外部定义

    1. 全局变量:整个程序任意位置都可以访问。

三条重要规则

  1. 标识符遵循先定义,后使用

  2. 同一个作用域内,不能定义同名变量 / 函数

  3. 嵌套包含的作用域出现同名变量:就近原则,内层屏蔽外层同名变量。

经典例题:全局 i 与 main 局部 i 同名,函数内访问全局 i,main 内优先访问局部 i。


五、变量的生命周期(时间角度:内存存活多久)

生命周期:变量从分配内存到内存回收的时间段。

1. 动态生命周期(局部变量 auto)

进入局部范围开辟内存,离开作用域,内存立即回收;存储在栈区。 未初始化局部变量:随机垃圾值。

2. 静态生命周期

程序启动时分配内存,整个程序运行结束才释放内存。 包含两类:

  • 全局变量

  • static修饰局部静态变量

static 修饰局部变量特点
  1. 作用域不变:依旧只能在原本局部范围访问;

  2. 生命周期变长:变为静态生命周期;

  3. 仅第一次调用初始化,后续调用保留上次值。

总结对照表

变量类型

作用域

生命周期

存储区域

默认初始值

普通局部变量 (auto)

局部 {}

动态(出作用域释放)

栈区

随机值

全局变量

整个程序

静态(程序结束释放)

数据区

0

static 局部变量

局部 {}

静态(程序结束释放)

数据区

0


六、程序内存分区模型(Linux gcc 环境)

程序运行时内存划分:

  1. 文本段 (.text):存放二进制代码指令,只读;

  2. 数据区

    1. .data:已经初始化的全局变量、static 静态变量

    2. .bss:未初始化全局 /static 变量,系统自动清零

    3. .rodata:只读常量(字符串常量)

  3. 堆区 (heap):手动申请释放(malloc/free)

  4. 栈区 (stack):普通局部变量、函数形参,函数调用自动分配回收

  5. 内核区:操作系统占用,用户代码无法访问


七、变量存储类型修饰符

语法格式:存储类型 数据类型 变量名;

1. auto

默认修饰符,普通局部变量,一般省略不写。

2. static

三大作用:

  1. 修饰局部变量:延长生命周期,保留上次数值;

  2. 修饰全局变量:作用域限制在当前.c 文件,其他文件无法 extern 访问;

  3. 修饰函数:函数仅本文件内可用,外部文件不能调用。

3. register(寄存器变量)

  • 建议编译器将变量存放 CPU 寄存器,加快访问速度;

  • 只是建议,编译器可以忽略

  • 限制:寄存器变量不能取地址&变量

4. extern

用于声明外部标识符:

  1. 声明其他文件定义的全局变量;

  2. 声明其他.c 文件定义的函数;

extern 只做声明,不会分配内存。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/2 4:05:48

金融时间序列预测实战:从特征工程到模型融合的资金流入流出预测

1. 从零到一&#xff1a;理解资金流入流出预测赛事的本质 如果你是一名数据分析师、金融科技从业者&#xff0c;或者是对量化金融感兴趣的学生&#xff0c;那么“天池资金流入流出预测”这个比赛标题&#xff0c;对你来说绝对是一个值得投入精力去研究的实战项目。这不仅仅是一…

作者头像 李华
网站建设 2026/8/2 4:05:25

AI智能体如何通过自动化实验平台实现“动手”能力?

1. 项目背景&#xff1a;当AI智能体需要“动手”时&#xff0c;我们遇到了什么&#xff1f;最近和几个做AI应用开发的朋友聊天&#xff0c;大家普遍有个感觉&#xff1a;大模型和智能体&#xff08;AI Agent&#xff09;的“脑力”越来越强了&#xff0c;能写代码、能分析数据、…

作者头像 李华
网站建设 2026/8/2 4:02:40

OpenCV图像几何变换实战:从平移旋转到透视校正的完整指南

1. 项目概述&#xff1a;从像素搬家到视觉魔法搞图像处理&#xff0c;尤其是用OpenCV&#xff0c;你迟早会跟“几何变换”这四个字打交道。这玩意儿听起来有点学术&#xff0c;但说白了&#xff0c;就是给图像里的像素“搬家”或者“变形”。想象一下&#xff0c;你拍了一张照片…

作者头像 李华
网站建设 2026/8/2 4:01:12

基于多智能体架构的Spring Boot与Go项目安全审计实战

1. 项目概述&#xff1a;为什么我们需要一个“会思考”的安全审计助手&#xff1f;最近在给几个Spring Boot和Go的微服务项目做安全加固&#xff0c;一个老问题又浮上水面&#xff1a;传统的安全扫描工具&#xff0c;无论是SAST&#xff08;静态应用安全测试&#xff09;还是DA…

作者头像 李华
网站建设 2026/8/2 4:01:08

Expo SDK 54 下 React Native 新老架构选型与低配设备内存优化指南

&#x1f4f1; Expo SDK 54 下 React Native 新老架构选型与低配设备内存优化指南 最近在纠结新老架构的问题, 在本地实验了一下,还是先选择新架构吧.毕竟这是未来.让ai总结了以下实验数据. 模型名称&#xff1a;Gemini 3.6 Flash (High) 修订版本&#xff1a;2026-08-01摘要&a…

作者头像 李华
网站建设 2026/8/2 4:01:04

【MATLAB】嵌入式看门狗电路控制与仿真

【MATLAB】嵌入式看门狗电路控制与仿真 摘要:嵌入式系统长期运行过程中,极易受到电磁干扰、电源波动、程序溢出、死循环等因素影响,出现程序卡死、任务阻塞、系统死机等故障,若无容错复位机制,会直接导致设备失控、功能瘫痪。看门狗(Watchdog)作为嵌入式系统核心容错防…

作者头像 李华