六安网站建设企业,福建建设执业注册管理中心网站,东营网站建设哪家更好,电商网站开发技术目录
为什么有指针参数传递这种用法
函数指针参数传递用法 编写不易#xff0c;仅供学习#xff0c;请勿搬运#xff0c;感谢理解
嵌入式C/C语言教程专栏文章连接
本篇万字#xff0c;博客最细仅供学习请勿搬运感谢理解
嵌入式C/C语言教程专栏文章连接
本篇万字博客最细嵌入式C语言基础详解教程文章(学不会来找我)_csdn嵌入式学习-CSDN博客
C语言指针介绍加练习-CSDN博客
你真的理解volatile关键字嘛本篇3K字放心食用立志最细。看不会找我_单片机防编译优化-CSDN博客
嵌入式C语言教程·工程文件中常见的注释用法。-CSDN博客
C语言指针介绍加练习-CSDN博客
为什么有指针参数传递这种用法 这两种用法其实涉及到了C语言的值传递和指针传递的核心区别在普通参数形式的C语言函数中其默认参数是值传递在调用函数的时候形参的值是由实参的值拷贝来的因为这个特性就导致一种情况。 函数的形参跟实参虽然数值一样但是形参确是实参的副本形参跟实参在内存中有着不同的地址这里形参指的就是函数形参也就是声明函数自己构造的函数参数实参是实际调用这个函数的时候传进这个函数的数值。 如果在函数代码中对形参进行修改改的是形参的数值影响的也是形参的地址内存中的数值并不能影响实参放在ram里面的数值这是因为定时函数的时候声明的函数参数不管是不是在函数体内都是属于局部变量。 函数参数属于局部变量特殊情况是当这个函数参数声明为指针的时候虽然声明指针参数在函数中仍然是局部变量但是可以通过解引用指针来操作外部变量。
特性值传递指针传递参数传递的内容变量的值副本变量的地址修改原始变量是否生效不会只影响副本会操作的是原始变量的地址内存访问独立分配内存函数返回时释放使用原始变量的内存地址使用场景数据只需在函数内部使用需要修改外部变量时
形象对比 ·值传递像是用源文件的复印件来做笔记改了复印件不会影响原笔记 ·指针传递直接在原件上写笔记有改动就立即体现在原件上
函数指针参数传递用法 函数原型在这个函数中声明了两个指针参数同时在函数代码块中对这个参数进行了赋值操作onCounter offCounter这两个参数在结束函数调用后传入的实参会被改变。
u8 SwitchControl(u8 *onCounter, u8 *offCounter, FlagStatus ioStatus, u8 currentState)
{if(ioStatus) {(*offCounter) 2 * TIMEUNIT;if(*onCounter)(*onCounter)--;elsecurrentState 0; // 闭合} else{(*onCounter) 2 * TIMEUNIT;if(*offCounter)(*offCounter)--;elsecurrentState 1; // 断开} return currentState;
}如果不使用函数参数使用函数的形参想要达到这个效果需要多谢几行代码声明一个结构体变量声明一个结构体变量同时使用return语句将结构体返回出去同时在函数外将结构体变量的值赋值给传入函数的实参或者直接在函数中调用实参指针进行赋值。 u8 SwitchControl(u8 onCounter, u8 offCounter, FlagStatus ioStatus, u8 currentState, u8 *newOnCounter, u8 *newOffCounter) {if(ioStatus) {offCounter 2 * TIMEUNIT;if(onCounter)onCounter--;elsecurrentState 0; // 闭合} else{onCounter 2 * TIMEUNIT;if(offCounter)offCounter--;elsecurrentState 1; // 断开}// 更新新的计数值*newOnCounter onCounter;*newOffCounter offCounter;return currentState;
} 欢迎指正希望对你有所帮助