首页 > 代码库 > [C++]变量存储类别
[C++]变量存储类别
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的寄存器中,读写速度更快。随着计算机硬件性能提高,现在寄存器变量使用得比较少了。
[C++]变量存储类别
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。