C语言易错点(函数里修改传入变量的值不会改变传入变量的指针)

阅读: 评论:0

C语言易错点(函数里修改传入变量的值不会改变传入变量的指针)

C语言易错点(函数里修改传入变量的值不会改变传入变量的指针)

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 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23