c语言变量使用范围

这个题为什么输出的是0123,它定义的都是局部变量数组那输出的不应该是main里自己定义的5678吗

主函数中定义的a[0]=5,a[1]=6,a[2]=7,a[3]=8。但调用func时把a地址传给了b,那么函数中b[0]就是a[0]了,b[1]就是a[1]了,b[2]就是a[2]了,b[3]就是a[3]了。函数中的for循环j取值是0、1、2、3,b[j]=j;循环过程中就是b[0]=0、b[1]=1、b[2]=2、b[3]=3;函数中看似操作的是b,但b是等于a的,所以实际上操作的就是a[0]~a[3],显然输出就是0、1、2、3了,它们把5、6、7、8对应覆盖了。追问

那main里定义的不是局部变量吗,它不是不受func函数里的影响吗

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-01-10
这涉及到指针的知识,地址传递,因为数组名也是种常量指针。它是把数组地址给自定义函数,改变b数组的值,当然也就是改变数组a的值,此时你完全可以把数组b看作数组a追问

那main里定义的不是局部变量吗,它不是不受func函数里的影响吗

追答

因为main它是一个实参,而func中b是一个形参,由实参传递到形参,看是否影响a,看是地址传递还是值传递,如果是值传递的话不影响a。地址传递的话影响a,此时形参b可以看作a,b的值改变,那么a的值也改变。局部变量当然指的是实参,而func()括号里是形参,当然这道题是讨论的不是局部变量作用域问题,主要是指针。

推荐一本很薄的书《彻底搞定c指针》姚云飞 只有46页,希望对于C语言指针问题(数组名也是指针常量),你能有所启发

追问

谢谢

追答

不客气,希望能够帮到你

本回答被提问者采纳
第2个回答  2019-01-10
在子函数中修改了a数组的值, 学到指针了 或者 马上就要学指针了?
相似回答