【C++】第7章:(三)变量的作用域与生存期

文章目录

    • 1.什么是作用域与生存期?
    • 2.变量的种类
    • 3.变量的存储类型

1.什么是作用域与生存期?

文件 file.cpp
int a; //文件作用域,全局变量
main 函数
{
f2();
...
f1();
}
f1 函数
{
auto int b; //函数作用域或块作用域,局部变量
f2();
...
}
f2 函数
{
static int c; //同 b
...
}

变量的作用域:变量起作用的范围(1.文件作用域;2.函数或者块作用域)
变量的生存期:变量能保存值的时间范围

2.变量的种类

局部变量:具有函数作用域或块作用域的变量
特点:只有定义变量的函数才能使用它
优点:增强模块的内聚性
全局变量:具有文件作用域的变量
特点:在其作用域内的所有函数均可使用它
缺点:增加了模块之间的耦合度,使得程序的维护代价升高,模块的可移植性降低

(注:用形参和实参实现模块之间数据的传递共享)

3.变量的存储类型

存储类型 数据类型 变量名 [,…]

局部变量

  • auto:自动型 (动态存储区)
  • register:寄存器型
  • static:静态型 (静态存储区)

全局变量

  • extern:外部型(静态存储区)

注:形参也是自动型变量

特点
静态存储区:生存期等同程序运行期

动态存储区:生存期同作用域

自动变量
作用域等同于生存期
(当一个变量不写存储类型则默认auto自动型)

静态变量
(静态变量作用:延展局部变量的生存期)

程序举例:

#include 
using namespace std;
int fun(int a)
{
 static int c=0; //c是静态变量
 c++;
 return c;
}
main()
{
 int cc;
 for(int i=1;i<=5;i++)
 cout<<fun(i)<<endl;
}

输出结果:
1
2
3
4
5

#include 
using namespace std;
int fun(int a)
{
 int c=0; //c是自动变量
 c++;
 return c;
}
main()
{
 int cc;
 for(int i=1;i<=5;i++)
 cout<<fun(i)<<endl;
}

输出结果:
1
1
1
1
1

外部变量
作用:延展全局变量的作用域

f1.cpp
#include 
using namespace std;
int count;//
void main()
{
...
}
f2.cpp
#include 
using namespace std;
extern int count;//扩大count的作用域
void isprime(int n)
{
...
}

你可能感兴趣的:(C++,笔记)