谈一谈变量的作用域

其实对于通俗的全局变量和局部变量,有一个很通俗易懂的界定,在函数之外的为全局变量,在函数之内的局部变量。需要特别注意的是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;
}