雙指標的兩種用法

2021-06-28 15:02:31 字數 956 閱讀 3971

題目是這樣的:

#include

using namespacestd;

void getmemory(char*p, int num)

int main(int argc, char* argv)

問:程式能否達到目的:在getmemory()中為main函式中的開闢空間,並將str指向這段空間?

分析:str是乙個指標,指向null,形參p也是乙個指標,初始也指向null,在getmemory函式中,這個指標又指向了新開闢的空間。但是只是形參的指向改變了,實參str仍然指向null,並沒有改變。因此,程式達不到題目的要求,而且執行時會出現錯誤,由於str一直指向null,執行strcpy時,會出現錯誤,提示某某記憶體不能寫入。

正確的方法應該採用雙指標,程式如下:

#include

using namespace std;

void getmemory(char **p, int num)

int main(int argc, char* argv)

分析:str是乙個指標,指向null。而呼叫getmemory函式時,傳遞的是str的位址,p是乙個二級指標,*p是乙個指標。因此,將str的位址賦給臨時變數p,則*p就是指標str的值,改變*p的值就相當於改變str的值。因此這種方法能夠得到題目要求的效果。另外還有一種方法,採用一級指標,讓函式返回乙個指標變數,指向新分配的記憶體,程式如下:

#include

using namespacestd;

char *getmeory2(char *p, int num)

int main(int argc, char* argv)

2. 另外用二級指標還經常用在動態申請二維陣列。

void main()

這樣就實現了二維陣列的動態申請,因為一般陣列宣告時,不允許下標是變數,所以如果想動態決定陣列各維的大小,最好這樣做。

附:關於指標的一些定義

雙指標的兩種用法

好久沒有用過c c 的二級指標了,總覺的它就是指標的指標,沒什麼大不了的,但是今天看到一道面試題,感覺自己對二級指標的理解還是不夠深刻。於是,從網上找資料,學習了一番 題目是這樣的 cpp view plain copy include stdafx.h include using namespac...

雙指標的兩種用法

好久沒有用過c c 的二級指標了,總覺的它就是指標的指標,沒什麼大不了的,但是今天看到一道面試題,感覺自己對二級指標的理解還是不夠深刻。於是,從網上找資料,學習了一番 題目是這樣的 cpp view plain copy include stdafx.h include using namespac...

雙指標的兩種用法

好久沒有用過c c 的二級指標了,總覺的它就是指標的指標,沒什麼大不了的,但是今天看到一道面試題,感覺自己對二級指標的理解還是不夠深刻。於是,從網上找資料,學習了一番 題目是這樣的 cpp view plain copy include stdafx.h include using namespac...