当存在具有相同名称的局部变量时,如何在C中使用全局变量?

时间:2015-02-07 17:47:43

标签: c

以下是有关本地和全局变量的示例。此程序的结果显示全局变量g的值。

如果我想打印/使用全局变量的值,该怎么办?

#‎include‬ <stdio.h>

/* global variable declaration */
int g = 20;

int main ()
{
/* local variable declaration */
int g = 10;

printf("value of g = %d\n", g);

return 0;
}

5 个答案:

答案 0 :(得分:4)

使用指向全局变量的指针

#‎include‬ <stdio.h>

/* global variable declaration */
int g = 20;

int main ()
{
int *pg = &g;
/* local variable declaration */
int g = 10;

printf("value of g = %d\n", *pg);

return 0;
}

答案 1 :(得分:3)

这是不可能的,本地g 阴影是全局的。但是,实际上这是一个功能而不是限制,因为这意味着您不必担心选择与全局不同的变量名称,当然,您可以轻松控制本地名称以允许访问类似名称全球性的。

答案 2 :(得分:1)

变量int g=10;的范围恰好在main()范围内,因此您可以在main()之外的任何地方打印全局变量,如调用某些API,如下所示。如果要打印,请使用它在main()内,那么你需要有一个指向全局变量的指针并取消引用它以获取值。以下方法不会引入任何新变量。

#‎include‬ <stdio.h>

/* global variable declaration */
int g = 20;

void print_global()
{
printf("value of g = %d\n", g);
}
int main ()
{
/* local variable declaration */
int g = 10;

printf("value of g = %d\n", g);
print_global();
return 0;
}

答案 3 :(得分:1)

  1. 只有全局变量,你可以调用另一个函数来访问它(并可能返回一个指针)。

  2. 对于所有阴影案例,您可以使用之前保存的指针。

  3. 尽管如此,最好的选择是最简单的选择:只需更改内部范围中的标识符以避免出现阴影。

答案 4 :(得分:-1)

删除局部变量并将其声明为全局...由于全局变量在整个程序中具有范围,因此可以在程序的任何函数中使用它。但是如果你仍想在本地声明相同的变量,那么局部变量将主导全局声明的变量。