在函数中怎么引用全局变量
22 个解决方案
#1
::变量名
C++
C++
#2
在C中呢?怎么处理
#3
事先用一个指针指向那个全局变量!
#4
还有没有其他的方法
#5
局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。
所以是没有办法的.
所以是没有办法的.
#6
修改其中一个变量的名字使他们被区分开来。如果在一起的两个人的名字读音一样,他们两个人也是不能分辨出是谁正在被呼唤的,更何况是机器
#7
局部会屏蔽全局。
要用全局变量,需要使用"::"
局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。
对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。
#8
域运算符::解决
使用同名变量会导致程序的可读性很差,强烈建议楼主用不同的变量名。
使用同名变量会导致程序的可读性很差,强烈建议楼主用不同的变量名。
#9
在C中没法解决,局部变量会将全局变量屏蔽,在C++中可以用到::运算符
#10
如果只是使用而不对全局变量赋值的话, 用个函数加个宏定义吧.
如果还需要对全局变量赋值, 就要多加一个函数了.
比如:
如果还需要对全局变量赋值, 就要多加一个函数了.
比如:
#include <stdio.h>
int x = 8;
int g_x(void) {return x;}
int g_x_set(int v) {x = v;}
#define g_x g_x()
int main()
{
int x = 3;
printf("g_x = %d, x = %d\n", g_x, x);
g_x_set( x << 1);
x = g_x << 1;
printf("g_x = %d, x = %d\n", g_x, x);
return (0);
}
#11
C++中用::就OK了,
#12
int val = 10;
int get_val()
{
return val;
}
void test()
{
int val = 5;
.....
get_val(); /* 得到的是全局的val */
}
int get_val()
{
return val;
}
void test()
{
int val = 5;
.....
get_val(); /* 得到的是全局的val */
}
#13
int val = 10;
int get_val()
{
return val;
}
void test()
{
int val = 5;
.....
get_val(); /* 得到的是全局的val */
}
int get_val()
{
return val;
}
void test()
{
int val = 5;
.....
get_val(); /* 得到的是全局的val */
}
#14
C++中直接默认的是局部变量,如果要永全局变量就用::变量就可以了
#15
局部变量和全局变量同名,是极不规范的做法
#16
#include <stdio.h>
int x = 8;
int main()
{
if(1==1)
{
int x = 3;
}
return x;//此处为8;
}
#17
以上方法导致局部变量不可用。建议不用同名变量。我的新手看法!
#18
C++中用::就OK
#19
支持
#20
局部变量和全局变量同名的时候,两个在地址空间的位置是不同的,
#21
而且利用VS2010编译的话,在C中可以用作用于标示符来标示某一变量是全局变量
static int a = 5;
int b = 10;
int *p = &b;
int func()
{
printf("%d\n",a);
int b = 5;
/* if(p == &b) //局部变量和全局变量同名的时候,如果没有指明是全局变量,则指的是局部变量
printf("%d\n",b);*/
printf("%d\n",::b); //如果要指名是全局变量,则用::来引用全局变量
return 0;
}
int main()
{
func();
return 0;
}
输出结果是5,10
static int a = 5;
int b = 10;
int *p = &b;
int func()
{
printf("%d\n",a);
int b = 5;
/* if(p == &b) //局部变量和全局变量同名的时候,如果没有指明是全局变量,则指的是局部变量
printf("%d\n",b);*/
printf("%d\n",::b); //如果要指名是全局变量,则用::来引用全局变量
return 0;
}
int main()
{
func();
return 0;
}
输出结果是5,10
#22
改名吧,简单有效。
#1
::变量名
C++
C++
#2
在C中呢?怎么处理
#3
事先用一个指针指向那个全局变量!
#4
还有没有其他的方法
#5
局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。
所以是没有办法的.
所以是没有办法的.
#6
修改其中一个变量的名字使他们被区分开来。如果在一起的两个人的名字读音一样,他们两个人也是不能分辨出是谁正在被呼唤的,更何况是机器
#7
局部会屏蔽全局。
要用全局变量,需要使用"::"
局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。
对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。
#8
域运算符::解决
使用同名变量会导致程序的可读性很差,强烈建议楼主用不同的变量名。
使用同名变量会导致程序的可读性很差,强烈建议楼主用不同的变量名。
#9
在C中没法解决,局部变量会将全局变量屏蔽,在C++中可以用到::运算符
#10
如果只是使用而不对全局变量赋值的话, 用个函数加个宏定义吧.
如果还需要对全局变量赋值, 就要多加一个函数了.
比如:
如果还需要对全局变量赋值, 就要多加一个函数了.
比如:
#include <stdio.h>
int x = 8;
int g_x(void) {return x;}
int g_x_set(int v) {x = v;}
#define g_x g_x()
int main()
{
int x = 3;
printf("g_x = %d, x = %d\n", g_x, x);
g_x_set( x << 1);
x = g_x << 1;
printf("g_x = %d, x = %d\n", g_x, x);
return (0);
}
#11
C++中用::就OK了,
#12
int val = 10;
int get_val()
{
return val;
}
void test()
{
int val = 5;
.....
get_val(); /* 得到的是全局的val */
}
int get_val()
{
return val;
}
void test()
{
int val = 5;
.....
get_val(); /* 得到的是全局的val */
}
#13
int val = 10;
int get_val()
{
return val;
}
void test()
{
int val = 5;
.....
get_val(); /* 得到的是全局的val */
}
int get_val()
{
return val;
}
void test()
{
int val = 5;
.....
get_val(); /* 得到的是全局的val */
}
#14
C++中直接默认的是局部变量,如果要永全局变量就用::变量就可以了
#15
局部变量和全局变量同名,是极不规范的做法
#16
#include <stdio.h>
int x = 8;
int main()
{
if(1==1)
{
int x = 3;
}
return x;//此处为8;
}
#17
以上方法导致局部变量不可用。建议不用同名变量。我的新手看法!
#18
C++中用::就OK
#19
支持
#20
局部变量和全局变量同名的时候,两个在地址空间的位置是不同的,
#21
而且利用VS2010编译的话,在C中可以用作用于标示符来标示某一变量是全局变量
static int a = 5;
int b = 10;
int *p = &b;
int func()
{
printf("%d\n",a);
int b = 5;
/* if(p == &b) //局部变量和全局变量同名的时候,如果没有指明是全局变量,则指的是局部变量
printf("%d\n",b);*/
printf("%d\n",::b); //如果要指名是全局变量,则用::来引用全局变量
return 0;
}
int main()
{
func();
return 0;
}
输出结果是5,10
static int a = 5;
int b = 10;
int *p = &b;
int func()
{
printf("%d\n",a);
int b = 5;
/* if(p == &b) //局部变量和全局变量同名的时候,如果没有指明是全局变量,则指的是局部变量
printf("%d\n",b);*/
printf("%d\n",::b); //如果要指名是全局变量,则用::来引用全局变量
return 0;
}
int main()
{
func();
return 0;
}
输出结果是5,10
#22
改名吧,简单有效。