C++變量存儲方式

C++變量存儲方式通過 存儲持續(xù)性、作用域、鏈接性 來描述的。

存儲持續(xù)性


存儲持續(xù)性 描述變量的生命周期,它可分為 自動存儲、靜態(tài)存儲、動態(tài)存儲線程存儲。

自動存儲

在函數(shù)中創(chuàng)建的變量為自動存儲變量,它的生命周期始于創(chuàng)建時,止于函數(shù)結(jié)束。

void show()
{
    // 自動存儲變量: 函數(shù)內(nèi)存創(chuàng)建
    int a = 0;
}

靜態(tài)存儲

在函數(shù)定義的外部聲明的變量,或使用static修飾的變量,都為靜態(tài)存儲變量,它在程序運行時一直存在。

// 靜態(tài)存在變量:在函數(shù)定義的外部聲明
int global = 1;
// 靜態(tài)存儲變量: static修飾的變量
static int internal_file = 2;

void show()
{
    //  靜態(tài)存儲變量: static修飾的變量
    static int count = 1;
}

動態(tài)存儲

使用new操作符創(chuàng)建的變量為動態(tài)存儲變量,它的生命周期持續(xù)到使用delete操作刪除變量內(nèi)存。

作用域


作用域 描述變量在當前文件中的可見范圍,它分為 局部變量全局變量。

局部變量

在函數(shù)內(nèi)部聲明的變量為局部變量,它只在函數(shù)內(nèi)部可見。

void show()
{
    // 局部變量,show()函數(shù)內(nèi)部可見
    int a = 0;
}

全局變量

全局變量在是函數(shù)定義的外部定義的變量,它在整個文件中可見。

// 全局變量,整個文件可見
int global = 1;
// 全局變量,整個文件可見
static int internal_file = 2;

int main()
{
  return 0;
}

void show() {
  
}

鏈接性


鏈接性描述變量在多個文件間的可見性,它分為 外部變量內(nèi)部變量。

外部變量 在多個文件可見,內(nèi)部變量 只在當前文件可見。

// 外部變量,多個文件可見
int global  = 1;
// 內(nèi)部變量,只在當前文件可見
static int internal_file = 2;

// const修飾的外部變量,變?yōu)榱藘?nèi)部變量
const int MONTHS = 12;

// extern const 修飾的外部變量,仍為外部變量
extern const int DAYS  = 365;


void show()
{
    // 內(nèi)部變量,只被初始化一次
    static int count = 0;
}

const 修飾的外部變量,會變?yōu)閮?nèi)部變量,只在當前文件內(nèi)部可見。否則,把const修飾的外部變量放到頭文件中,然后被多個源文件引用,那么變量將會出現(xiàn)多處定義。

外部變量的規(guī)則

外部變量只能在一處聲明,多處引用,引用時需要使用extern關(guān)鍵字。

// file1.cpp
// 聲明初始化
int global  = 1;
// file2.cpp
// 使用extern關(guān)鍵字,引用外部變量
extern int global;

外部變量的特殊使用

如果局部變量與外部變量沖突,那么如何引用外部變量呢,C++可以通過作用域解析來訪問外部變量

#include <iostream>
  
int global = 10;

int main()
{
    using std::cout;
    using std::endl;
    int global = 20;
    cout << "local global = " << global << endl;
    // 通過::作用域解析符,使用外部變量global
    cout << "Global global = " << ::global << endl;
    return 0;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容