以下是有关本地和全局变量的示例。此程序的结果显示全局变量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;
}
答案 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)
只有全局变量,你可以调用另一个函数来访问它(并可能返回一个指针)。
对于所有阴影案例,您可以使用之前保存的指针。
尽管如此,最好的选择是最简单的选择:只需更改内部范围中的标识符以避免出现阴影。
答案 4 :(得分:-1)
删除局部变量并将其声明为全局...由于全局变量在整个程序中具有范围,因此可以在程序的任何函数中使用它。但是如果你仍想在本地声明相同的变量,那么局部变量将主导全局声明的变量。