为什么调用函数之后,这个值是10而不是3,是地址问题吗?这个流程是怎样的,望解答
这就是值传递和址传递的区别,你可能还不是很理解
值传递,就像你的代码,只是将a 的值传递给add,就是10 这个数值传递过去了,add 的形参人家有自己的地址空间,你在add 里面修改的只是形参的自己空间。跟主函数中的a 没有任何关系
你这个add函数传入的只是形参,它自己会搞一个变量来接收你传入的变量的值的值的值,重要的事情说三遍,其实就是add函数把你调用它时给的变量a的值拷贝了一份,你在add函数里面给a重新赋值其实是给了另一个变量赋值了。此问题不涉及地址问题
这个是值传递,值传递是将实参复制了一份传给的子函数。如果要通过子函数改变a的值得用地址传参。你可以在网上搜一下参数值传递和地址传递的区别。
这么理解,主函数main()里的变量 a , 和 add() 函数里的 a , 它们是两个变量,虽然同名,但属于不同的函数体内。就像有两个家庭,两家都各有一个儿子,而且两个小孩名字都叫“张三”,在main() 家给张三 10块钱,并且通知 add()家,但在add()家,它们只给了它们家的张三 3 块钱,然后这两个张三拿到的钱会一样吗。所以,变量虽然同名,但它们所属函数不同,作用域也就不同,系统就是靠这个把它们区分开的。如果是地址,那就是一个张三了,把main()家的地址给了add(), add()就可以通过地址很容易找到main()家的张三了。