c函数里面没有定义x,但是c函数不是在main函数里吗?局部变量x=5的作用域是main函数,不是应该包含c函数吗?
初学C,问题可能很幼稚,希望各位帮忙解答一下,谢谢!
在main函数或其他函数里定义了局部变量,同时同名的全局变量同时也存在,当调用一个使用了该变量的函数(该变量在此函数中无定义)时,函数会使用全局变量。而不是main或其他函数中定义的同名变量,你遇到的情况就是在void c()函数中,x没有定义。
虽然在main函数里有对c()函数的调用,但是c()函数与main函数还是属于两个作用域,对于函数来说首先是自己定义的局部变量,其次是大家共有的全局变量.
如果你c函数改为 void c(int x),在main中调用 c(x);则会传入main中的局部x.**
验证一下,把全局变量x去掉,应该不会通过编译,会出现未定义标识符。
main函数里面的那个x=5只能在main函数里面用,而不能跑到c函数中去。所以C函数中用的x是全局变量的。如果你想main函数中的x能够被c函数使用,那就只能通过参数传递过去
c语言当你定义了全局变量和局部变量并且重名的时候,c语言的匹配原则是最近匹配。
这是比较合乎常理的。
这就好比你们工厂的大门叫做“前门”,正好你的工厂开设在北京,北京的紫禁城南边也有一个地方,叫做前门。
现在你在工厂里上班,你的同事让你去前门接一个人,显然说的是工厂的前门,而不是几公里以外的前门。