我目前正试图了解这个代码,我遇到了一个C认证测试。代码的正确输出是12、13、13。
在它调用3个最终输出之前,我尝试打印出这些值,我注意到原因是在顶部声明的外部x和函数内部的x之间存在范围差异我的问题是,我如何知道哪些函数在整个代码中访问哪个对象?
#include <stdio.h>
#include <stdlib.h>
int x;
int modifyvalue()
{
return(x+=10);
}
int changevalue(int x)
{
return(x+=1);
}
int main(){
int x=10;
x++;
printf("[1] %d \n\n", x);
changevalue(x);
printf("[2] %d \n\n", x);
x++;
printf("[3] %d \n\n", x);
modifyvalue();
printf("First output:%d \n\n\n",x);
x++;
changevalue(x);
printf("Second output:%d \n\n\n",x);
modifyvalue();
printf("Third output:%dn \n\n\n",x);
}
最佳答案
始终从最近的范围获取变量。
每当调用printf("...", x)
时,它从函数x
中获取main()
。
函数modifyvalue()
总是在所有函数之外的x
上操作。
函数changevalue(int x)
总是对参数x
-进行操作,该参数是传入变量的副本。
所以在您的例子中,这两个函数实际上对x
中的main()
没有任何作用。
关于c - 如何判断函数何时访问局部变量或外部变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56440623/