C 中的全域性變數宣告和定義

2021-09-02 19:58:26 字數 1446 閱讀 7182

1.全域性變數

全域性變數在整個原始檔的作用域都是有效的,只需要在乙個原始檔中定義全域性變數,在其他不包含全域性變數定義的原始檔中用extern關鍵字再次宣告這個全域性變數即可。

也可以在乙個原始檔中定義這個全域性變數,在標頭檔案中用extern關鍵字再次宣告這個全域性變數,如果其它原始檔要用到這個全域性變數,只需要包含這個標頭檔案就可以直接使用了。

例:我在class1中定義乙個全域性變數陣列a[20],在class1中對陣列a的賦值,我想在class2中使用,其方法如下。

class1.h檔案:

#include #include using namespace std;

extern int a[20]; //extern 關鍵字再次宣告這個全域性變數

class class1

;

class1.cpp檔案:

#include "class1.h"

int a[20]; //全域性變數

int class1::c = 1; //類中靜態變數的初始化

class1::class1()

c = 2;

cout << "\n";

}class1::~class1()

class2.h檔案:

#pragma once

#include "class1.h"

class class2

;

class2.cpp檔案:

#include "class2.h"

class2::class2()

執行結果:

class1中對陣列a的賦值,在class2中可以成功取出來。

在這個程式中還對類中的靜態變數做了驗證,類中宣告了靜態成員變數,在類中,靜態成員變數可以實現多個物件之間的資料共享,並且使用靜態資料成員還不會破壞隱藏的原則,即保證了安全性。因此,靜態成員是類的所有物件中共享的成員,而不是某個物件的成員。上面**中,在對class1的物件c1指向的c賦值為5後,物件c2指向的c也變成了5,說明靜態成員變數實現了類物件間資料的共享,該類生成的物件中的靜態成員便改良指向同乙個位址。

2.static全域性變數

static和extern來修飾同乙個變數,即static和extern不可同時出現。

static修飾的全域性變數是宣告與定義同時進行,就是說只要你在標頭檔案中使用static宣告乙個全域性變數,同時它也就被定義了。

static修飾的全域性變數是檔案作用域的,即他只能在當前檔案中有用。在其他檔案中使用時,其他編譯單元會另外開個記憶體儲存它,在其他編譯單元對它的修改並不影響它本身值。因為它所在的實體地址和其他編譯單元使用它時的實體地址不一樣。

全域性變數的定義宣告

c 中定義全域性變數要注意的地方 yandaren 1220 chinaunix部落格 c 中定義全域性變數要注意的地方 在c 中定義全域性變數是應該盡量在.cpp檔案中定義,而不要在.h 檔案中 定義,定義好了之後,可以在.件中利用 extern關鍵字進行 宣告.如果在.件中定義的話,多層包含可能...

C 全域性變數的定義和宣告

本篇文章是對c 全域性變數的宣告與定義進行了詳細的分析介紹,1 宣告與定義 函式或變數在宣告時,並沒有給它實際的物理記憶體空間,它有時候可保證你的程式 編譯通過 函式或變數在定義時,它就在記憶體中有了實際的物理空間。基本型別變數的宣告和定義 初始化 是同時產生的 而對於物件來說,宣告和定義是分開的。...

C 全域性變數的宣告與定義

1.header1.h中宣告全域性變數,header1.cpp中定義全域性變數 header1.h ifndef header1 h define header1 h extern int g n 標頭檔案中必須加extern宣告全域性變數,不賦值 int g o 錯誤 int g o 10 錯誤 ...