C 指向指標的指標與動態陣列

2021-06-02 21:05:03 字數 1506 閱讀 1354

這裡以一維字元陣列開篇,

#include using namespace std;

void main()

; char **pb=&pc[0];

for(int i=0;i<3;++i) }

cout<

下面來逐句解析:

char *pc=;

定義了乙個指標陣列,為pc[0], pc[1], pc[2],分別存放了三個字元陣列的首位址,這裡pc[0]存放了'a'的位址值,pc[1]存放了'x'的位址值,pc[2]存放了's'的位址值,而這三個存放位址(long型數值)的指標變數也儲存在記憶體中,因為是long型陣列,所以它們在記憶體中的位址是連續的,也就是&p[0]+1=&p[1],&p[1]+1=&p[2]。

char **pb=&pc[0];
定義了乙個指向指標的指標,其本質上指向了記憶體中乙個long型變數,將它的位址儲存起來。這樣可以理解為,存放'a'位址long型變數的位址被存放在變數pb中,此時,變數pb的值即是指標陣列第乙個元素pc[0]的位址,pb+1是指標陣列第二個元素pc[1]的位址,pb+2是指標陣列第三個元素pc[2]的位址。

pb=&pc[0], pb+1=&pc[1], pb+2=&pc[2]

至此,所有的變數在記憶體中的關係已經建立,可以用乙個指向指標的指標pb去訪問二維字元陣列的任意元素的值與位址。

cout<
pb+i的值為指標變數pc[i]在記憶體中的位址,*(pb+i)則把該位址中的值取了出來,比如*(pb+1)=pc[1],這裡的pc[1]的值是第二個字串"xyz"的首位址(即字元'x'的位址、為一long型數值),有了'x'的位址即可訪問第二個字元陣列的任意成員,如需要輸出「xyz"的第三個字元'z',則先取得'z'的位址,*(pb+1)+2,然後從找尋存放於該記憶體位址中的東西(就是字元'z'),通過*(*(pb+1)+2)取得'z'這個字元。

下面應用指向指標的指標定義動態陣列

假設有乙個矩陣m×n,其動態陣列建立函式如下:

void test4(int m,int n)

{ int **pptest=new int *[m];

for(int i=0;i

test(3,4);

輸出:

int **pptest=new int *[m];
先定義乙個具有m個元素的指標陣列,本質上是在記憶體堆空間中定義了個具有m個元素的long型陣列,將該陣列的首位址存於變數pptest中,該變數位於記憶體棧空間。

for(int i=0;i

*(*(pptest+i)+j)=i+j;

pptest+i為存放記憶體堆空間中第i行的一維整形陣列的首位址的指標變數在記憶體堆空間中的位址,把它的值取出來就可得到第i行一維陣列所有元素在記憶體堆空間中的位址,再通過解引用操作符"*"操作該位址的那片記憶體空間,這樣則實現了通過在棧空間中的指向指標的指標**pb來訪問和操作動態陣列的所有元素。

c 指標陣列與指向陣列的指標

1 int a 10 指向陣列的指標 a是乙個二級指標,可認為是乙個二維陣列的首位址,指向乙個一維陣列,陣列儲存了10個int資料。int arr1 10 一維陣列 int arr2 2 10 二維陣列 int a 10 arr1 a為指向一維陣列的指標,arr1 應該替換為 arr1,cblog外...

指標陣列與指向陣列的指標

指標陣列 定義 int p n 優先順序高,先與p結合成為乙個陣列,再由int 說明這是乙個整型指標陣列,它有n個指標型別的陣列元素。這裡執行p 1時,則p指向下乙個陣列元素,這樣賦值是錯誤的 p a 因為p是個不可知的表示,只存在p 0 p 1 p 2 p n 1 而且它們分別是指標變數可以用來存...

指標陣列與指向陣列的指標

1.int p 4 表示 p 是乙個指標變數,他指向包含 4 個元素的一維陣列。2.int p 4 表示 p 4 是指標陣列 這個問題我們採用以下的方式來理解它就一目了然了 對於 int p 4 我們可以先將 p 看成是乙個整體,並用 a 代替 變為 int a 4 很容易看出,a 有4個元素,每個...