静态持续性、无链接性
程序员文章站
2022-05-12 14:02:05
...
至此,已经学习过了链接性分别为内部和外部、作用域为整个文件的变量。接下来学习静态持续变量家族中的第三个成员—无链接性的局部变量。它是如下创建的:将static限定符用于代码块中声明的变量前面。意味着虽然该变量只在代码块中使用,但是它在该代码块不处于活动状态时仍然存在。因此在调用两次函数之间,该变量的值不变。如果初始化了该变量,,则程序只在启动时进行这唯一的一次初始化。以后再调用函数时,将不会像自动变量那样再次被初始化。如下是演示示例:该程序统计每次键盘输入的字符总数,并把所有次数键盘输入的字符总数记录下来。
#include <iostream>
using namespace std;
const int SIZE=12;
void strCount(const char* str);
int main()
{
char input[SIZE];
char next;
cout<<"Enter the line:\n";
cin.get(input,SIZE);
while (cin)
{
cin.get(next);
while (next!='\n')
{
cin.get(next);
}
strCount(input);
cout<<"Enter the next line (empty line to quit ):\n";
cin.get(input,SIZE);
}
cout<<"Done \n";
return 0;
}
void strCount(const char* str)
{
static int sumCount=0;
int count =0;
cout<<"\""<<str<<"\"contains ";
while(*str)
{
count++;
str++;
}
sumCount+=count;
cout<<count<<" characters.\n";
cout<<sumCount<<" characters total.\n";
}
输出结果:
程序分析:该程序演示了一种处理行输入可能长于目标数组的方法,方法cin.get(input,SIZE);将一直读取输入,直到到达行尾或读取了SIZE-1个字符为止。他把换行符留在输入队列中。cin.get(next);读取行输入之后的字符。随后使用一个循环来丢弃余下的字符。该程序还利用了get(input,SIZE)读取空行将导致程序停止cin为false。