欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

静态持续性、无链接性

程序员文章站 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。

相关标签: 局部变量 函数