子函数的改变若想影响到父函数该怎么做呢?

子函数的改变若想影响到父函数该怎么做呢?

简单来说需要两步,即:

传指针。

解引用。

首先,在我们演示子函数是如何通过“转指针,解引用”影响父函数之前,

我们需要先了解一下什么是局部变量。

局部变量,也称内部变量,是指在一个函数内部或复合语句内部定义的变量。

局部变量的作用域是定义该变量的函数或定义该变量的复合语句。也就是说,

局部变量只在定义它的函数或复合语句范围内有效,只能在定义它的函数或

复合语句内才能使用它们。例如:

在这里插入图片描述

在函数f1内定义了三个变量,a为形参,b、c为一般变量。在fl的范围内a、b、c有效,或者说a、b、c变量的作用域限于f1内。同理,x、y、i、j的作用域限于f2内。m、n的作用域限于main函数内。关于局部变量的作用域还要说明以下几点:

1、主函数main()中定义的变量也只在主函数中有效,而不能因为在主函数中定义在整个文件或程序中有效。主函数也不能使用其他函数中定义的变量。因为主函数也是一个函数,它与其他函数是平行关系。这一点是与其他语言不同的,应予以注意。

2、不同函数中可以使用相同名字的变量,它们代表不同的对象,分配不同的单元,互不干扰。例如,上面在f1函数中定义了变量b和c,倘若在f2函数中也定义变量b和c,它们在内存中占不同的单元,互不干扰。

3、形式参数是属于被调函数的局部变量。例如上面f1函数中的形参a,也只在f1函数中有效,其他函数可以调用f1函数,但不能引用f1函数中的形参a。

4、在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效,这种复合语句也称为“分程序”或“程序块”。(以上关于局部变量的相关内容来自百度百科,嘻嘻)

了解了局部变量的定义后,我们进入正题:

我们定义一个子函数,子函数的功能是交换两个变量a,b的值,并且通过主函数(父函数)去调用该子函数,在主函数中给定a,b变量的值,我们通过观察交换前后a,b的值来判断子函数是否影响了主函数中变量的值。

错误示例1:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过编译后我们发现a,b的值并没有改变,究其原因我们可以知道,在主函数中我们定义了a,b两个变量,在子函数中也定义了a,b两个变量,但是通过学习了局部变量的定义后我们可知,这两个变量在各自的函数中都有效,并且可以同名,但是它们互不干扰,互不影响,所以在主函数中调用子函数时,主函数的a,b值并未改变,不受影响。但是子函数中a,b的值是改变了的,如图,在子函数中输出a,b的值,显示已经交换。

在这里插入图片描述

错误示例2:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

该示例在示例1的基础上,传了指针,但是没有解引用。*p1,*p2是指针,分别指向子函数中a,b的地址,p1,p2分别保存着a,b的地址,所以运行结果是p1与p2交换了,也就是a,b的地址交换了,所以a,b的值在子函数中交换了,但是由于没有解引用,所以主函数中a,b的值并未改变,如图所示。
在这里插入图片描述

错误示例3:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

该示例是使用了“野指针”,即悬挂指针。本示例中的野指针为申请访问受限内存区域的指针。在定义指针时并未初始化,所以*tmp的地址是随机值,而当程序往下进行时,由于没有访问权限,所以导致程序崩溃。

正确示例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

该示例为正确方法,传指针,解引用,子函数的改变影响了主函数,所以主函数中a,b的值交换了。

总结:传指针与解引用必须都完成,传指针仅仅指向了相应的变量地址,而解引用则是跳进了该地址所代表的值,所以传指针解引用后,调用的子函数就将主函数中的a,b值改变了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值