傳遞指針地址作爲參數的意義何在?例如:傳遞指針地址作爲參數
int *ptr_one;
ptr_one = (int *)malloc(sizeof(int));
然後函數被調用爲以下:
func(&ptr_one);
注意該函數的參數是如下:
func(int **ptr)
{
......
}
傳遞指針地址作爲參數的意義何在?例如:傳遞指針地址作爲參數
int *ptr_one;
ptr_one = (int *)malloc(sizeof(int));
然後函數被調用爲以下:
func(&ptr_one);
注意該函數的參數是如下:
func(int **ptr)
{
......
}
如果你想修改指針本身,那麼你需要通過引用或指針地址來傳遞它。例如,
func(int **ptr)
{
free(ptr);
ptr = new int[2]; //side note: use new instead of malloc in C++
//memory allocated with new is deallocated with
//delete
}
在C語言中,傳遞指針的地址是你能分配或釋放該指針的內存功能的唯一途徑。然而,在C++中,通過引用傳遞通常會更好。因此,C++版本的代碼如下所示:
int *ptr = new int;
func(ptr);
delete ptr;
void func(int *&ptr) {
.
.
.
}
我的指針指向一個條目列表,每次我調用它時,函數都會不斷修改指針的頭部。我想這就是你自己修改指針的意思。對 ? – Anas 2015-02-12 00:42:28
@Anas:是的。如果你只傳入'head',那麼指針在調用代碼中就不會改變,只是在函數中。 – wolfPack88 2015-02-12 00:44:26
指針傳遞到指針的目的是這樣的,指針變量可以被修改。
回想一下,從C風格的編碼,可以通過傳遞參數的地址或指針來修改參數。如果該參數是一個需要修改的int,則傳遞一個指向該整數的指針。同樣,如果函數將修改指針參數,它將通過指向指針(或指針地址)的指針傳遞。
對於許多示例之一,當您傳遞{anything}的地址時,該函數可能會修改調用者的{anything}。這種做法(和你的代碼)比C++更C。 – 2015-02-12 00:24:11
一個典型的例子是當你添加一個元素到一個列表中時,你需要傳遞它的'head'(指針)並且能夠修改它。使用單個指針是一個非常常見的錯誤,會產生很多令人頭疼的問題。但是要走的路是C++引用,即通過引用傳遞指針,如'func(int *&ptr)' – vsoftco 2015-02-12 00:31:43
在現代C++中,我們很少需要指針,所以傳遞它們(無論如何)很難開始用。 – MSalters 2015-02-12 11:30:37