全局变量和结构变量

定义

定义在函数内部的变量叫局部变量(函数的形参也是局部变量)

定义在所有函数的外面的变量叫全局变量

区别

全局变量在所有函数中均可以使用,局部变量只能在定义它的函数内部使用

静态变量

示例

#include <iostream>
using namespace std;
void Func()
{
	static int n = 4; //静态变量只初始化一次
	cout << n << endl;
	++ n;
}
int main()
{
	Func(); Func(); Func();
}
//输出结果:4 5 6

静态变量的应用:strtok 的实现

#include <iostream>
#include <cstring>
using namespace std;
int main()
{
	char str[] ="- This, a sample string, OK.";
	//下面要从str逐个抽取出被" ,.-"这几个字符分隔的字串
	char * p = strtok (str," ,.-");
	while ( p != NULL) //只要p不为NULL,就说明找到了一个子串
	{
		cout << p << endl;
		p = strtok(NULL, " ,.-");
		//后续调用,第一个参数必须是NULL
	}
	return 0;
}

<aside> ❓ 如果要自己编写 strtok 函数,该如何实现?

</aside>

char * Strtok(char * p,char * sep)
{
	static char * start ; //本次查找子串的起点
	if(p)
		start = p;
	for(; *start && strchr(sep,*start); ++ start); //跳过分隔符号
		if( * start == 0)
			return NULL;
	char * q = start;
	for(; *start && !strchr(sep,*start); ++ start); //跳过非分隔符号
		if( * start) {
			* start = 0;
			++ start;
		}
	return q;
}

<aside> ⚠️ 程序的关键是使用静态变量。

</aside>