扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
改变函数形参的值并不会影响到实参的值这是函数的基本知识。要在函数中修改实参的值需要传递指向实参的指针作为参数然后通过指针去修改实参的值。
创新互联专注于企业成都营销网站建设、网站重做改版、剑阁网站定制设计、自适应品牌网站建设、H5开发、商城网站制作、集团公司官网建设、成都外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为剑阁等各大城市提供网站开发制作服务。
如果通过函数传参方式调用,并且不是传的指针,那就不会改变原来的值,如果想改变全局变量的值,可以直接在函数中使用,不需要传参。
即函数编译完,系统重新定义了两个指针变量(编译器做的事),指向你传进去的指针变量,你在函数里改变的是系统重新定义的两个变量,你定义的两个指针并没有变,当然不会影响外面的输出了。
其实,结构名就是一个变量,由于你的形参和你的实参取名是一样的。而且对于形参肯定会变 实参不会变。所以,你中间的maxA变量,其实是子函数的形参变了。
} 但是无论怎么都不会成功,因为改变的情况是在x y的副本中进行,与原来的x y没有关联, 所以你上面的问题出现的原因是一样的。
fun在stack生成a,b的copy,所以交换的是copy,不是main中的a,b。通过指针可以完成。
这是由于c语言中的方法参数传递分为传值引用(形参,在方法中修改的值只在方法中有效)和指针引用(实参,可以直接修改实际结构体或参数的值),而你问题中的代码属于形参传递,所以在main函数中打印的结果没有变化。
C语言主要靠函数调用和return在函数之间切换,很难做到在多层调用中直接返回主函数。虽然goto语句可以无条件跳转,但是必须在同一个函数中使用。
简单理解为main给f1传参数时,把a、b、c复制了一份。
调用函数,只能改变指针指向的内存空间的内容,不能改变实参指针变量的值。我觉得题主对指针变量,还算有一点了解。指针变量,其实也就是一个变量,但它的值是一块内存的地址。
如果通过函数传参方式调用,并且不是传的指针,那就不会改变原来的值,如果想改变全局变量的值,可以直接在函数中使用,不需要传参。
因为交换的并不是值,而是指针。而指针本身是传的值。意思就是在fun中虽然a指向了y,b指向了x但是a、b只是p和q的副本。如果要交换变量值应该用int c,*c=*a,*a=*b,*b=*c。
123本身默认的就是一个字符串常量,他的值不容修改,p只是一个指针,执行该字符串的首地址,对该地址的值指向的地址空间的值的改变也是不允许的。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流