我目前正试图了解这个代码,我遇到了一个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/

10-10 01:00
查看更多