SYD8801是一款低功耗高性能蓝牙低功耗SOC,集成了高性能2.4GHz射频收发机、32位ARM Cortex-M0处理器、128kB Flash存储器、以及丰富的数字接口。SYD8801片上集成了Balun无需阻抗匹配网络、高效率DCDC降压转换器,适合用于可穿戴、物联网设备等。具体可咨询:/
函数里修改传入变量的值不会改变传入变量的指针
相关语句如下:
uint8_t a,b,c;
a=4;
b=6;
c=0;
oled_printf(0,0,"a:%d b:%d c:%d",a,b,c);
c=Max_Common_Divisor(a,b);
oled_printf(0,1,"A:%d B:%d C:%d",a,b,c);
其中Max_Common_Divisor函数如下:
uint32_t Max_Common_Divisor(uint32_t a, uint32_t b)
{
uint32_t temp;
if(a<b)
{
temp=a;
a=b;
b=temp;
}
while(b!=0)
{
temp=a%b;
a=b;
b=temp;
}
return a;
}
经过上面的运算输出结果如下:
a:4 b:6 c:0
A:4 B:6 C:2
实验结果可以证明:
不管Max_Common_Divisor函数对传入的变量a,b进行怎样的修改,在函数外边看(main)a,b这两个变量的值是不变的。
也可以这样分析编译的过程:
当执行Max_Common_Divisor函数时:
1.把a,b作为变量拷贝到R1,R2(按照单片机来解释),或者说当调用这个函数的时候a,b的值就放到R1,R2了
2.然后把R1,R2压栈,当需要这些变量的时候从堆栈中获取
3.用堆栈中的数据进行计算等等操作
4.最后退出函数
所以:不管函数里怎么改变传入的那两个变量,都不会改变函数外的数据,因为在调用这个函数的时候传进来的就不是函数外的数据的原件,而是一个备份而已
所以在主函数外看:ab的值永远是46
这里为什么会让人混淆了,或许还有一点就是函数外面的变量名字和函数里面是一样的吧
本文发布于:2024-02-02 21:30:04,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170688060346561.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |