欢迎光临
我们一直在努力

C 语言 「值传参」「指针传参」「结构体传参」 三者核心区别(嵌入式开发必懂,含传参本质 + 效率 + 场景 + 坑点)

C 语言 「值传参」「指针传参」「结构体传参」 三者核心区别(嵌入式开发必懂,含传参本质 + 效率 + 场景 + 坑点) 这三种传参是嵌入式 C 语言最高频的传参写法,其中「结构体传参」本质是值传参的一种特殊形式,还衍生出「结构体指针传参」这种嵌入式刚需写法,三者的核心差异集中在 传参本质、内存开销、能否修改原值、适用场景 四个维度,也是嵌入式笔试高频考点,我结合你之前学的寄存器、DMA、外设驱动等知识,一次性讲透,看完绝对不会混淆 ✅ 前置核心概念(必看,理解所有传参的底层逻辑) 不管哪种传参方式,C 语言的传参底层本质只有一个:「值传递」 —— 调用函数时,编译器都会把「实参」的数据 拷贝一份 传递给「形参」,形参是函数栈上的独立变量。 所有的差异,只在于:拷贝的「数据内容」不同、拷贝的数据「占用内存大小」不同! 普通值传参:拷贝的是「变量的数值」(如 int=4 字节、char=1 字节) 指针传参:拷贝的是「变量的内存地址」(固定 4 字节,32 位 MCU) 结构体传参:拷贝的是「结构体的全部成员数据」(占用内存 = 结构体总大小)

一、三种传参方式 逐个详解(定义 + 原理 + 代码 + 特点)

✅ 方式一:普通「值传参」 (最基础,int/char/uint16_t 这类基础类型)

✔ 定义 函数形参为基础数据类型(int/char/short/float/uint8_t/uint16_t等),调用时传入变量本身。

// 形参是基础类型x,实参传变量a void func(int x) { x = x + 10; } // 调用 int a = 5; func(a); ✔ 核心原理 调用函数时,把「实参变量的数值」拷贝一份 给形参,形参和实参是 内存中两块完全独立的地址。 ✔ 核心特点 ✅ 优点:语法最简单、内存开销极小(最多 4 字节)、绝对安全,函数内修改形参,完全不会影响主调函数的实参原值; ❌ 缺点:函数内部永远无法修改实参的原值,只能用实参的值做计算 / 判断。 ✔ 嵌入式适用场景 占 80% 的基础场景:纯计算、ADC 滤波值计算、数值判断、状态读取、返回计算结果等,比如: ADC 采集值的滤波函数 uint16_t Adc_Filter(uint16_t adc_val) 数值范围判断 uint8_t Is_Val_Ok(uint16_t val) 温度换算 float Adc_To_Temp(uint16_t adc)

✅ 方式二:「指针传参」 (核心,int* / char* / 数组名 / 结构体* 这类指针类型)

✔ 定义 函数形参为指针类型(类型后加*),调用时传入变量 / 数组 / 结构体的 内存地址(变量加&,数组直接传数组名)。

// 形参是指针int* x,实参传变量地址&a void func(int *x) { *x = *x + 10; } // 调用 int a =5; func(&a); ✔ 核

赞(0)
未经允许不得转载:171主机测评 » C 语言 「值传参」「指针传参」「结构体传参」 三者核心区别(嵌入式开发必懂,含传参本质 + 效率 + 场景 + 坑点)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址