關於指標和指向指標的指標

2021-09-30 03:13:54 字數 638 閱讀 3447

如果在乙個函式內部你需要修改指標所指向的資料內容,那就使用指標,如果你要修改指標的指向,那就使用指向指標的指標。

如果函式的引數是乙個指標,不要指望用該指標去申請動態記憶體。test函式的語句getmemory(str, 200)並沒有使str獲得期望的記憶體,str依舊是null。

void getmemory(char *p, int num)

void test(void)

毛病出在函式getmemory中。編譯器總是要為函式的每個引數製作臨時副本,指標引數p的副本是 _p,編譯器使 _p = p。如果函式體內的程式修改了_p的內容,就導致引數p的內容作相應的修改。這就是指標可以用作輸出引數的原因。在本例中,_p申請了新的記憶體,只是把_p所指的記憶體位址改變了,但是p絲毫未變。所以函式getmemory並不能輸出任何東西。事實上,每執行一次getmemory就會洩露一塊記憶體,因為沒有用free釋放記憶體。

如果非得要用指標引數去申請記憶體,那麼應該改用「指向指標的指標」。

void getmemory2(char **p, int num)

void test2(void)

此時編譯器也為函式的每個引數製作臨時副本_p。但是函式體內沒有使用_p,而使用*p。p和_p都指向*p。這裡改變*p的指向的記憶體。

指標陣列和指向指標的指標

今天終於弄明白了,指標陣列,和指向指標的指標的區別。1 include 2 include 3 void main 4 11 for i 0 i 3 i 12 15 一 指標概念 當我們程式如下申明變數 short int i char a short int pi 程式會在記憶體某位址空間上為各變...

關於陣列指標和指向陣列指標的指標及其new

後來在wp123456xt的csdn的博文上看到他的一篇求助文章 陣列指標問題 求指教 也無人回答,閒來無事,就一一解釋下吧,這些理解都屬於一家之見,也許其中的一些理解上會有問題,還希望大家指出,共同進步嘛。includeusing namespace std int main q new floa...

指向指標的指標

理解二級指標,關鍵是理解指標的儲存方式和意義。這裡以指向int型指標的指標為例,梳理一下二級指標在記憶體分配中 的奧妙.include using namespace std int main int p a int point p cout a a endl p p endl p p endl p...