雙指標的兩種用法

2021-07-04 01:36:51 字數 1621 閱讀 5697

好久沒有用過c/c++的二級指標了,總覺的它就是指標的指標,沒什麼大不了的,但是今天看到一道面試題,感覺自己對二級指標的理解還是不夠深刻。於是,從網上找資料,學習了一番……

題目是這樣的:

[cpp]view plain

copy

#include "stdafx.h"

#include 

using

namespace

std;  

void

getmemory(

char

*p, 

intnum)  

int_tmain(

intargc, _tchar* argv)    

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

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

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

[cpp]view plain

copy

#include "stdafx.h"

#include 

using

namespace

std;  

void

getmeory(

char

**p, 

intnum)  

int_tmain(

intargc, _tchar* argv)    

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

[cpp]view plain

copy

#include "stdafx.h"

#include 

using

namespace

std;  

char

* getmeory2(

char

*p, 

intnum)  

int_tmain(

intargc, _tchar* argv)    

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

[cpp]view plain

copy

void

main()   

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

附:關於指標的一些定義

雙指標的兩種用法

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

雙指標的兩種用法

題目是這樣的 include using namespacestd void getmemory char p,int num int main int argc,char argv 問 程式能否達到目的 在getmemory 中為main函式中的開闢空間,並將str指向這段空間?分析 str是乙個...

雙指標的兩種用法

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