C++中共有四种存储类别标识符:auto/static/register/extern
1.auto
函数或分程序内定义的变量(包括形参)可以定义为auto(自动变量)。如果不指定存储类别,则隐式定义为auto。
例如,函数类有如下定义:
auto int x , y ;
等价于:
int x , y ;
2.static
除了形参,可以将局部变量和全局变量定义为静态变量。用static标识符。
static int a;//a是全局静态变量
f()
{static int b = 1;}//b是局部静态变量
与auto不同,static变量的生存期是程序开始运行到运行结束(auto变量生存期是函数调用结束)。
若定义静态变量时没有对其赋初值,系统自动赋初值0;若赋初值,则仅在编译时赋初值一次,程序运行后不再给变量赋初值。当上一次调用局部静态变量所在的函数时,该变量的值继续有效(为上次函数调用结束时保留的值)。
3.extern
在函数外定义的变量如果没有用static声明,则是extern外部变量。外部变量只能隐式定义为extern,不能显示定义。
对外部变量声明时,系统不分配存储空间。
#include <iostream> using namespace std; int x = 2 , y = 2 ;//定义外部变量 void f1() { extern char c1 , c2 ;//声明外部变量 cin>>c1>>c2; } char c1 , c2 ;//定义外部变量 int main() { int m , n ; f1(); cout <<c1<<"+"<<c2<<"="<<x+y<< endl; return 0; }
结果是这样:
注意,如果把extern去掉了,再输入xy,回车,会出现:
因为c1,c2的作用域只在f1函数里面。如果不用extern,想达到第一幅的效果,只要把
char c1 , c2 ;//定义外部变量
这句拿到f1()前面就行了。
4.register
寄存器变量的值保存在CPU的寄存器中,读写速度更快。随着计算机硬件性能提高,现在寄存器变量使用得比较少了。
时间: 2024-11-07 05:16:29