c++ 函数参数是数组,形参和实参地址不一样也能一起改值?
char[]的形参与实参地址不一样不能改,为什么int[]就可以顺便一问为什么函数中*str++可以,而main中*str++编译器提示str必须是左值?...
char[] 的形参与实参地址不一样不能改, 为什么int[] 就可以 顺便一问为什么函数中 *str++可以, 而main中*str++ 编译器提示str必须是左值?
展开
展开全部
没有完全看懂你的描述。在main主函数里,char a[20],这个a是数组类型,值是不能改变的,用++必然出错。而函数参数里的char str[20],表面上与主函数里的a没有什么不同,但实际传递到函数中的str是一个指针,所以可以++。你可以跟踪一下代码,看一看和我说的是不是相同的
追问
是这样的,谢谢你。但是为什么 change()里形参num的地址和实参nums不同,change()里改了形参的值,实参的值也变了?
追答
地址不同,(从逻辑上)可看成两个不同的变量。这两个变量,一个是数组本身,一个是指向这个数组的指针。用指向这个数组的指针来修改数组,数组的值自然改变了。
形参实参这些术语,实际应用中都没必要去区分,只要会看参数的类型就行了。一般来说,需要修改实参的,形参一般都定义为指针*或引用&。数组[]其实和指针也差不多,我个人把它们都看成相同的东西(不要轻易接受我这种观念)。而那种直接传个int进去的,就相当于复制了一份拷贝,对这个拷贝的修改,肯定是不会影响到实参的
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询