c - 如何判断函数何时访问局部变量或外部变量?
问题描述
我目前正在尝试理解我遇到 C 认证测试的这段代码。代码的正确输出是 12、13、13。我尝试在调用 3 个最终输出之前打印出这些值,我注意到原因是在顶部声明的外部 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
in没有任何作用main()
。
推荐阅读
- laravel - 操作总是返回未经授权的
- c - 从输入文件读取数据并放入数组的函数
- mysql - Why is my SQL query not using the table's composite index?
- javascript - 浏览器语言。奇怪的行为 - Javascript
- c# - 将xml反序列化为对象列表
- php - Unable to convert xml into html when passing from a laravel controller
- c# - SQL 代理 - Zipfile.ExtractToDirectory 不起作用
- python - 在 chrome 调试模式下 Selenium-webdriver 打开的现有浏览器会话中打开网页
- python - Return only the first word from a sentence and all other unique words from text file?
- javascript - array.map() - currentValue and index parameters switched?