谈一谈变量的作用域
其实对于通俗的全局变量和局部变量,有一个很通俗易懂的界定,在函数之外的为全局变量,在函数之内的局部变量。需要特别注意的是main()也是函数,从这个角度来看所有函数都是平等的,只是main()函数具有执行优先级的特性。
在这里我想说一说一些特殊的情况
1、for()括号的变量作用域:
#include <iostream>
using namespace std;
int main()
{
for(int i = 0; i < 5; i++)
{
cout << i << endl;
int j = 0;
}
cout << i << endl; //true or false
cout << j << endl; //true or false
return 0;
}
运行结果:
这说明for()括号的变量只在对应{}内部有效,并且{}内部定义的变量只在对应{}内部有效。
2、函数能直接修改全局变量的值吗
答案是肯定的
#include <iostream>
using namespace std;
int a = 5;
int main()
{
for(int i = 0; i < 5; i++)
{
cout << i << endl;
int j = 0;
a = 0;
}
//cout << i << endl;
//cout << j << endl;
cout << a << endl;
return 0;
}
运行结果:
3、指针变量有全局和局部之分吗
答案是有的,虽然局部指针变量最终会被销毁,但是其发挥的作用是有效的,这一点与一般的局部变量不同,原因是指针是基于地址来操作的。
#include <iostream>
using namespace std;
int a = 5, b = 10;
int *p_a = &a;
int main()
{
*p_a = 4;
for(int i = 0; i < 5; i++)
{
static int *p_b = &b;
*p_b = 8;
}
cout << a << endl; //4
cout << *p_a << endl; //4
cout << b << endl; //8
cout << *p_b << endl; //wrong
return 0;
}