首页 > 解决方案 > 如何在C中访问同名的局部变量和全局变量

问题描述

我在学校有这个任务,其中我必须找到以下 C 代码的输出,并且还要解释输出。

#include<stdio.h>
int i;
void fun1(void);
void fun2(void);
int main()
{
    fun1();
    fun2();
    return 0;
}

void fun1(){
    i=20;
    printf("%d\t",i);
}

void fun2(){
    int i=50;
    printf("%d",i);
}

输出为 20 50 因为在 fun1() 中,全局变量“i”被分配给 20 并被打印出来。在 fun2() 中,变量“i”是一个局部变量,它被声明并初始化为 50,然后被打印出来。

出于好奇,我有以下问题,如何在 fun2() 中使用全局变量“i”?一个简单的解决方案是简单地更改名称并避免整个事情。但我的好奇心是由于Java,其中有一个关键字“this”来访问类变量而不是局部变量。

那么有什么办法可以在C中做到这一点吗?

标签: cscopedeclaration

解决方案


唯一的方法是在代码块中隐藏局部变量的声明。

例如

#include <stdio.h>

int i = 10;

void fun2( void )
{
    int i = 20;
    printf("local i = %d\n",i);

    {
        extern int i;
        printf( "global i = %d\n",i);
    }
}

int main(void) 
{
    fun2();
}

程序输出为

local i = 20
global i = 10

推荐阅读