「雙指針有時也用於通過引用傳遞指向函數的指針」 有人可以向我解釋上述語句,指向通過引用方式?雙指針有時也用於通過引用來傳遞指向函數的指針
回答
我相信這個例子使得它更清晰:
您的示例不需要雙指針,也不使用函數指針。 – 2010-10-08 06:38:59
這只是爲了說明雙指針如何工作。這個問題不是關於函數指針的,因此它不會涵蓋它。 – Naveen 2010-10-08 06:39:48
對不起,我誤解了這個問題。如果你稍微編輯你的答案,我可以取消我的-1,否則它說我的投票被鎖定在:( – 2010-10-08 07:00:22
這意味着你有一個函數需要一個指針指針(例如輸入int **
)。這允許你修改指針(指向哪個數據)的方式,通過引用指針允許傳遞指針。
void change (int *p) {*p = 7;}
void Really_Change (int **pp) {*pp = null;}
int p = 1;
int *pp = &p;
// now, pp is pointing to p. Let's say it has address 0x10;
// this makes a copy of the address of p. The value of &p is still 0x10 (points to p).
// but, it uses that address to change p to 7.
change(&p);
printf("%d\n", p); // prints 7;
// this call gets the address of pp. It can change pp's value
// much like p was changed above.
Really_Change(&pp);
// pp has been set to null, much like p was set to 7.
printf("%d\n", *pp); // error dereference null. Ka-BOOM!!!
所以,你可以傳遞一個指向int
並更改該值以同樣的方式,你可以傳遞一個指針的指針並改變其值(改變它所指向。)
只是爲了澄清英語語法...沒有指向函數的指針;該函數是接收指向任意類型指針的指針。 – Potatoswatter 2010-10-08 06:01:21
'cout << * pp << endl; //打印1;' 我認爲它會打印'7'。 – Hemant 2010-10-08 06:44:19
@Hemant:是的,我想我錯過了編輯。謝謝。 – JoshD 2010-10-08 06:47:02
我會嘗試用代碼和簡單的英語:)來解釋。解釋可能會很長,但這將是值得的。
假設我們有一個程序,運行它的main()函數,然後我們調用另一個需要參數int
的函數。
從概念上講,當你將一個變量作爲參數傳遞給一個函數時,你可以這樣做(粗略地說)兩種方式:按值或通過引用。
「按值」是指給函數一個變量的副本。該函數將接收其「內容」(值),但它不能將實際變量更改到其自己的代碼體外,因爲它只有一個副本。
另一方面,「通過引用」意味着給函數提供變量的實際內存地址。使用它,函數可以找出變量的值,但它也可以到達指定的地址並修改變量的內容。
在我們的C程序中,「按值」意味着通過int
的副本(僅以int
作爲參數),「通過引用」表示將指針傳遞給它。
讓我們看到一個小的代碼示例:
void foo(int n) {
n = 10;
printf("%d\n", n);
}
int main() {
int n = 5;
foo(n);
printf("%d\n", n);
return 0;
}
什麼將這個程序的輸出是什麼? 10 10
?不。 10 5
!因爲我們通過了int
的副本,按價值而不是參照,foo()
只修改了存儲在其副本中的號碼,無法達到main()
的副本。現在
,如果我們這樣來做:
void foo(int* n) {
*n = 10;
printf("%d\n", *n);
}
int main() {
int n = 5;
foo(&n);
printf("%d\n", n);
return 0;
}
這次我們引用了foo()
我們的整數:它是實際的內存地址。 foo()
具有完全的權力,通過訪問它在內存中的位置來修改它,foo()
和main()
正在使用相同的副本,因此輸出將是10 10
。
正如你所看到的,指針是一個引用,... ,但也是一個在內存中的數字位置。它類似於int
,只有內部包含的數字被解釋爲不同。想想這樣:當我們通過引用傳遞int時,我們通過值傳遞一個int指針!。因此,值/參考邏輯可以應用於指針,即使它們已經是引用。
如果我們的實際的變量不是一個整數,而是一個int引用(指針),我們希望main()
和foo()
共享該引用,以便foo()
可以modifiy它的同一個副本,我們該怎麼辦?爲什麼當然,我們需要參考我們的參考!指向指針的指針。那就是:
int n; /* integer */
int* n; /* integer reference(pointer). Stores an int's position in memory */
int** n; /* reference to integer reference, or double pointer.
Stores int*'s memory address so we can pass int*s by reference. */
我希望這很有用。
- 1. 通過引用傳遞函數指針
- 2. 通過引用傳遞指針數組
- 3. 函數:傳遞指向$ con的指針
- 4. c - 傳遞指向函數的指針
- 5. 在指針指針的C中通過引用實現傳遞?
- 6. C++通過函數指針指向另一個函數指針
- 7. FASM通過引用傳遞/指針
- 8. 指針和通過引用傳遞C++
- 9. 通過引用傳遞指針?
- 10. 通過引用發送一個指針指針指向
- 11. 取消引用指向雙指針的指針
- 12. 通過指針指向指針
- 13. 將單指針和雙指針傳遞給函數c
- 14. 用指針傳遞引用
- 15. 解引用雙指針,三指針等
- 16. 指向指針的指針在調用函數時獲得EXC_BAD_ACCESS
- 17. c指向指針或將函數傳遞給函數的指針
- 18. 如何通過引用傳遞指針來更改指針所指向的位置?
- 19. 通過使用指針指針來更改引用
- 20. 通過引用雙指針 - 混淆
- 21. 如何爲通過引用調用傳遞的指針指針賦值?
- 22. 將指針傳遞給對指針參數的引用
- 23. 指針,雙指針,數組
- 24. 通過引用(指向對象的指針向量)比傳遞值更快嗎?
- 25. 指向函數的指針
- 26. 通過指針指向結構指針來更改變量
- 27. 指向指針的指針和指向數組的指針
- 28. 更改指針指針指針引用
- 29. 在使用ctypes的傳遞指向struct指針C函數
- 30. 函數指針指向一個函數指針的函數
可能有助於獲得更多的上下文。你能否提供該報價的鏈接? – JaredPar 2010-10-08 05:55:25
[http://stackoverflow.com/questions/2570447/why-we-used-double-and-triple-pointer-in-objective-c-or-c-language]第一個答案 – Tony 2010-10-08 05:56:27