C 基礎3 作用域

2021-05-27 23:30:58 字數 2059 閱讀 2872

在c++中,變數的作用域可以分為全域性作用域,區域性作用域;全域性作用域又可分為檔案作用域、整個程式作用域。

1. 全域性作用域

處於全域性作用域的變數有,一般全域性變數、static全域性變數、static區域性變數,這些變數存放在全域性/靜態資料區域中。

在沒有標頭檔案的情況下,

(1)static全域性變數只能在定義它的檔案中使用,不能跨cpp檔案使用。

(2)一般全域性變數如果需要在整個程式中使用,那麼在定義它的cpp檔案中,加上extern欄位,例如:extern double test = 9;在需要訪問它的cpp檔案中,宣告的時候加上extern欄位,例如:extern double test;。

在有標頭檔案的情況下,

(1)如果在a.cpp中include了b.h,並且在b.h中定義了static全域性變數,在使用過程中,會發現,這個static全域性變數在a中的變化絲毫不影響它在b中的值,反之亦然。

(2)如果在a.cpp中inluce了b.h,並且在b.h中定義了全域性變數,將發生編譯錯誤。

如果是在dll中的全域性變數,並在dll中修改了全域性變數,想在程式中使用的方法是:

在dll中這樣宣告:

_declspec(dllexport) int share_int = 5;

extern "c"

_declspec(dllexport) int do_some_thing()

return share_int;

extern "c" 

_declspec(dllexport) int change_share_int(int val)

int temp=share_int;

share_int = val;

return temp;

在客戶端中這樣使用:

const tchar* dll_debug_path=_t("a.dll");

#pragma comment(lib, "../debug/a.lib")

_declspec(dllimport) int share_int;

int _tmain(int argc, _tchare* argv)

hinstance hdlla = loadlibrary(dll_debug_path);

typedef int(*dosomethingfunc)( );

typedef int(*changeshareintfunc)(int);

dosomethingfunc p_do_some_thing = (dosomethingfunc)getprocaddress(hdlla,"do_some_thing");

changeshareintfunc p_change_share_int =(changeshareintfunc)getprocaddress(hdlla, ("change_share_int"));

if(p_do_some_thing||!p_change_share_int)

return 1;

p_do_some_thing();

int old_share_int = p_change_share_int(20);

2. 區域性作用域

語句作用域:在乙個語句塊中定義,在這個語句塊中可用。

函式作用域:在函式內定義,在整個函式中可用。

類作用域:    如果兩個類的成員一模一樣,也是2個型別。成員在整個類中,有效。

區域性變數的初始化:內建型別,使用前必須顯示初始化,如果是全域性變數,會預設自動初始化為0。

類型別,如果成員是內建型別,不會自動初始化;成員為型別,會自動初始化。如果是類型別全域性變數,所有的成員都會自動初始化。

區域性變數存在於棧中。

new 的變數存在於堆中,malloc的變數存在於自由區中,常量存在於常量區中。

3.關於using

當想使用乙個命名空間中的型別時,有2種方式:

(1) using namespace std; 可以使用std中的所有型別

(2) using namespace::型別;只能使用宣告的這個型別

C 基礎作業 3 變數的作用域

3.變數的作用域 前言 這個主是講明在c 中變數的作用域 就是說你申明乙個變數,那麼這個變數在哪些地方是可以使用,而哪個地些你使用不了 這個跟你申明變數時有著很大的關係 下面是我寫的一段 using system using system.collections.generic using syst...

JavaScript 基礎筆記 3作用域

作用域 在一定的範圍內進行讀寫操作 域 空間,範圍,區域 script裡面 全域性變數 全域性函式 自上而下 函式 由里到外 區域性可以改全域性的值 作用 讀,寫 作用域鏈 函式內找不到宣告順著作用域鏈往上找 瀏覽器 js解析器 1 找一些東西 var function 引數.var a 未定義 所...

作用域(基礎篇)

一 作用域關鍵字 public 公共的 public表明該資料成員 成員函式是對所有使用者開放的,所有的使用者都可以直接進行呼叫。protected 受保護的 protected 對於子女 朋友來說,就死public的,可以自用使用,沒有任何限制,而對於其他的外部class,protected就變成...