指標,記憶體儲存及const使用

2021-06-20 05:19:23 字數 1669 閱讀 5941

[申明指標]

type *pointername;

如int *pvariant;

[初始化指標]

(1)可以將變數名應用&操作賦,將變數的位址賦給指標,來獲取被命名的記憶體的位址

(2)使用new操作符返回未命名的記憶體位址賦給指標

[注意事項]

指標申明後,在編譯階段系統並沒有對指標分配記憶體空間,直接對指標變數pvariant賦初值會出現segmentation fault 例如:int *pvariant=4; 原因是系統還沒有分配記憶體給pvariant,所以沒有地方存放常數4

與普通變數初始化不同如int pvariant;編譯階段,系統就分配了記憶體給變數pvariant,所以可以進行操作pvariant=4;

自動儲存, 靜態儲存, 動態儲存(有時也叫做自由儲存空間或堆)

1 自動儲存方式----內存在棧上建立

在函式內部定義的常規變數使用自動儲存空間,也被稱為自動變數(automatic variable),他們在所屬的函式被呼叫時自動產生,在該函式結束時消亡。

2 靜態儲存(static)----內存在靜態儲存區域分配

從靜態儲存區域分配。內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。例如全域性變數,static變數。

3 動態記憶體儲存---從堆上分配記憶體

一種比自動變數和靜態變數更靈活的方法,從乙個記憶體池中申請分配記憶體。程式在執行的時候用malloc或new從記憶體池中申請任意多少的記憶體,記憶體池同用於靜態分配和從棧上分配的記憶體是分開的。malloc或new允許在乙個函式中分配記憶體,而在另乙個函式中用free或delete釋放記憶體,因此資料的生命週期不完全受到程式或函式的生命週期的控制了。與常規變數相比,使用new和delete使程式設計師對程式如何使用記憶體有更大的控制權。

int nvariable;          //編譯階段已經在棧上分配了記憶體,所以位址&nvariable不可變,位址對應的值nvariable可變

const int nvariable; //位址&nvariable不可變,值nvariable也不可變,所以一般使用是申明和初始化同時進行,如const int nvariable=3;

int *pvariable; //編譯階段沒有分配記憶體,所以位址pvariable可變,位址pvariable指向的值value也可變。初始化有兩種方式,見上面。

//結合const 就有三種情況

const int *pvariable; //位址pvariable可變,位址pvariable指向的value不變, 如pvariable=new int;

int *const pvariable; //這是乙個常指標,不可以進行++或者--操作,位址pvariable不可變,位址指向的值value不變

const int *const pvariable; //位址pvariable不變,指向的值也不變。

對指標使用const

const 是可以宣告常量的,宣告之後不能被修改。對於乙個指標和乙個陣列,我們有三種const 的形式 即const 指標的指向 這個指標不能指向別處 指向const的指標 不能通過這個指標修改指向的值 const 變數 這個位址的值不能被修改 假設有乙個陣列aa 與乙個指標p int const ...

const的指標的使用

宣告說明符號的順序是不重要的,事實的標準順序是 首先連線說明符,然後是型別限定符。如 extern const int size 1024 這是最正常的const使用 1 const int ptr size 估計你第一時間就認為是指向整數的常量指標吧。其實這是指向常整數的指標,即指標可以修改,但指...

使用 const 修飾的指標

在c 中,可以使用 const 來修飾乙個指標,如 第一種形式 const int ptr 第二種形式 int const ptr 第三種形式 const int const ptr 第一種形式,指示乙個指標不能修改指標所指向物件的內容,但可以修改指標所指向的物件 第二種形式,指示乙個指標不可以修改...