一般來說,為函式傳入乙個引數,如果希望函式執行完成後對引數的改動依然保留,那麼有兩種方式:
①傳入乙個引用
②傳入乙個指標
傳入引用的方式很好理解,就是相當於將變數本身傳入,針對變數所進行的一切修改都是直接對變數本身的修改。
傳入指標則不然,傳入指標後進行的修改,實際上是對指標指向的位址的內容進行修改,而不是對指標本身進行修改。比如說,指標的值是0x01cd3e2c,那麼被修改的是0x01cd3e2c位址所代表的內容,指標的值0x01cd3e2c本身是不會被修改的。也就是說,傳入指標,修改的是指向的內容,但指向的位址是不會變的。
即便對指標的值進行了修改,函式結束後,會發現指標的值依然不變,這是由於傳入的引數不是引用造成的。傳入的引數不是引用,那麼對該引數進行的任何修改都不會保留到函式結束後。
比如:void function(int* pvalue)
void main()
上面的1執行完成後,會發現pvalue的值依然是null。但是在函式體內剛對pvalue進行修改時,其值卻是正確的。
這是因為在函式體內,直接對pvalue的值進行了修改,而非對pvalue所指向的記憶體位址資料。pvalue作為乙個實參,傳入後的一切修改都不會影響到自身的值,所以才會出現上述情況。
因此,改為如下**:
void function(int*& pvalue)
void main()
這樣,將function的傳入引數改為指標的引用,於是對指標自身值的一切修改就都會得到儲存。2執行完成後,會發現pvalue的值是正確的。
指向指標的指標,也就是類似於void**。同理,void**作引數是相同的原因。
總之,如果要在函式內部修改指標自身的值,那麼應該使用指標的引用或者指向指標的指標。
指標的引用與指向指標的指標
一般來說,為函式傳入乙個引數,如果希望函式執行完成後對引數的改動依然保留,那麼有兩種方式 傳入乙個引用 傳入乙個指標 傳入引用的方式很好理解,就是相當於將變數本身傳入,針對變數所進行的一切修改都是直接對變數本身的修改。傳入指標則不然,傳入指標後進行的修改,實際上是對指標指向的位址的內容進行修改,而不...
指標的型別 指標所指向 指向指標的引用
從語法的角度看,你只要把指標宣告語句裡的指標名字去掉,剩下的部 分就是這個指標的型別。這是指標本身所具有的型別。讓我們看看例一中各 個指標的型別 int ptr 指標的型別是int char ptr 指標的型別是char int ptr 指標的型別是int int ptr 3 指標的型別是int 3...
指向指標的引用
原帖問題一 a p 時,由於p是乙個b 在轉換時,會產生乙個臨時變數,而在c 中臨時變數是不允許作為非const引用的 a reference that is not to const cannot be bound to a non lvalue 就是這個意思 因此改為int test a con...