學習c語言這麼久,使用指標時還是有這樣或者那樣的問題,且每次都有新的問題出現,只能感慨其博大精深。但指標作為c/c++的精華,我們也只能迎難而上。
0. 何為指標?
int* p;
如上述例子,我們可以這樣理解:我們定義了乙個指標變數p,它指向的資料的型別為int型。每當定義這樣乙個int*型的指標變數,系統(32位)會分配這一段大小為4byte的記憶體,而p儲存的就是記憶體的位址。
1.指標的初始化
int *a;
*a = 10;
我們來看乙個錯誤的例子,那麼它錯在哪了呢?這個宣告建立了乙個名叫a的指標變數,然後將10放到a所指向的記憶體位置,但是在這裡,我們宣告了這個變數,但是並未對它進行初始化,所以a所指向的記憶體是未知的,於是就會出現錯誤。所以,我們使用指標時,須確保它已經被初始化。
2.指標的間接訪問
我們可以通過兩種方式訪問指標,一是通過 * 操作符對指標進行解引用,我們可以把*當成一把鑰匙,而指標所指向的記憶體裡有許多房間,通過這把鑰匙,我們便可以開啟房間,找到裡面的東西;但指標其實也有另一種方式進行訪問。我們來看以下例子:
char *a = "abcdef";
printf("%c", a[4]);
我們看到這裡指標是以陣列下標訪問的方式,其實a[4]等價於*(a+4),指標先找到首元素位址,對位址+4後的位址進行解引用。
3.指標陣列和陣列指標
什麼是指標陣列? 首先它是乙個陣列,陣列的元素都是指標。同理我們知道,陣列指標是乙個指標,它指向乙個陣列。
int*p1[10];
int*(p2)[10];
顯然前者的宣告方式為指標陣列,p1[10]表示元素為10的陣列名為p1,在用int *對其修飾,表示p1裡面存放了10個int 型的指標,所以稱其為指標陣列。後者為陣列指標, * (p2)表示乙個指標,指向了乙個存放了10個int型資料的陣列。
4.二級指標
如何理解二級指標,我們知道一級指標儲存的是儲存資料記憶體的位址,而二級指標則儲存的是一級指標的位址;
int p = ;
int *a1 = p;
int**a2;
上述例子中,二級指標a2指向的是一級指標的a1的位址,而一級指標a1指向的是資料p位址。 深入理解指標
指標 是乙個特殊的變數 它裡面儲存 的數值被解釋成為記憶體裡的乙個位址 指標也是一種資料型別,並且也是有值的。要搞清乙個指標需要搞清指標的四方面的內容 指標的型別,指標所指向的型別,指標的值或者叫指標所指向的記憶體區,還有指標本身所佔據的記憶體區。讓我們分別說明。先宣告幾個指標放著做例子 例一 1 ...
深入理解指標
指標 是乙個特殊的變數 它裡面儲存 的數值被解釋成為記憶體裡的乙個位址 指標也是一種資料型別,並且也是有值的。要搞清乙個指標需要搞清指標的四方面的內容 指標的型別,指標所指向的型別,指標的值或者叫指標所指向的記憶體區,還有指標本身所佔據的記憶體區。讓我們分別說明。先宣告幾個指標放著做例子 例一 1 ...
深入理解指標
指標的概念 指標是乙個特殊的變數,它裡面儲存的數值被解釋成為記憶體裡的乙個位址。要搞清乙個指標需要搞清指標的四方面的內容 指標的型別,指標所指向的型別,指標的值或者叫指標所指向的記憶體區,還有指標本身所佔據的記憶體區。讓我們分別說明。先宣告幾個指標做例子 例一 1 in ptr 2 char ptr...