这个问题, 网上回答的都是一致的, 因为大部分只是专业性的描述答案, 并且都是对理解方面比较抽象, 以下的这些答案内容分析是个人的一些理解然后编辑而成, 如果不全面或者是阐述错误, 忘读者能够指出, 我会重新整理.
首先是网络上的答案:
"能, 局部会屏蔽全局[1]. 要用全局变量, 需要使用"::"[2];
局部变量可以与全局变量同名, 在函数内引用这个变量时, 会用到同名的局部变量, 而不会用到全局变量, 对于有些编译器而言, 在同一个函数内可以定义多个同名的局部变量, 比如在两个循环体内都定义同名的局部变量, 而那个局部变量的作用域就在那个循环体内[3]"
1.局部会屏蔽全局:
{
int i=2,j=3,k;
k=i+j;//外部变量已经赋值, 对以下内部变量中不起作用
{
int k=8;//局部变量, 在内部, 和外部的函数并不起冲突
printf("%d\n",k);
}
printf("%d\n",k);
}
输出值为8,5;2.要用全局变量, 需要使用"::":
char zhou; //全局变量
void sleep()
{
char zhou; //局部变量
char(局部变量) = char(局部变量) *char(局部变量) ;
::char(全局变量) =::char(全局变量) *char(局部变量);
}
3. 在同一个函数内可以定义多个同名的局部变量
int a = 10;//在同一个函数内部, 先后执行, 两个循环的命名都是一样的
{
for (int i = 0; i < 3; i++) {//作用域外的全局变量a, 并不影响, 循环体内部的变量
int a = i;//局部变量
NSLog(@"i1 = %d\n", a);
}
for (int i = 0; i < 4; i++) {
int a = i;//局部变量
NSLog(@"i2 = %d\n", a);
}
}
NSLog(@"a = %d", a);
输出值为2015-02-22 13:12:53.511 好[54833:303] i1 = 0
2015-02-22 13:12:53.513 好[54833:303] i1 = 1
2015-02-22 13:12:53.514 好[54833:303] i1 = 2
2015-02-22 13:12:53.514 好[54833:303] i2 = 0
2015-02-22 13:12:53.515 好[54833:303] i2 = 1
2015-02-22 13:12:53.515 好[54833:303] i2 = 2
2015-02-22 13:12:53.516 好[54833:303] i2 = 3
2015-02-22 13:12:53.516 好[54833:303] a = 10