Re: [問題] 雙重指標

看板C_and_CPP (C/C++)作者 (New CygnusX)時間15年前 (2009/02/19 11:53), 編輯推噓1(1019)
留言20則, 3人參與, 最新討論串3/7 (看更多)
課本範例: For call by addr. void f(int *a) { *a=10; } void main() { int b=5; f(&b); //把b記憶體位址,傳入f } 不能拿以下例子去判斷變數傳遞方式是不是call by addr. or value吧? void f(int *a) { a=new int (10); } void main() { int b=5; f(&b); } 存取的變數根本就不一樣了 (上面是存取addr point到的變數,下面是存取pointer) -- 我的露天拍賣: http://tinyurl.com/6z4rw7 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.118.126.177 ※ 編輯: walm20 來自: 140.118.126.177 (02/19 11:54) ※ 編輯: walm20 來自: 140.118.126.177 (02/19 11:58)

02/19 13:15, , 1F
我覺得你第二個例子這樣兩者都不算才對~
02/19 13:15, 1F

02/19 13:16, , 2F
call by val. addr.應該是要成立在傳入副函式且不改其
02/19 13:16, 2F

02/19 13:17, , 3F
值的使用, 你這樣寫 反而是新開空間給a了~ b有傳沒傳
02/19 13:17, 3F

02/19 13:17, , 4F
都一樣~ :p
02/19 13:17, 4F

02/19 13:28, , 5F
你這樣講 是假設你在main裡面想改的是b的值
02/19 13:28, 5F

02/19 13:28, , 6F
若我想改b的位址 那就是call by value
02/19 13:28, 6F
※ 編輯: walm20 來自: 140.118.126.177 (02/19 13:30)

02/19 14:00, , 7F
Call by xxx是看參數的傳遞方式, 不是看參數怎麼做存取.
02/19 14:00, 7F

02/19 14:02, , 8F
而且您的第二個例子只會造成mem leak沒有其他作用@_@"
02/19 14:02, 8F

02/19 14:03, , 9F
它不會改變b, 也跟參數call by xxx沒什麼直接的關係.
02/19 14:03, 9F

02/19 14:09, , 10F
我以為大家焦點只會在call by xxx,所以就不寫delete
02/19 14:09, 10F

02/19 14:11, , 11F
重點不是delete, 而是第二個例子變成和b完全沒有關係.
02/19 14:11, 11F

02/19 14:11, , 12F
那您的意思應該是說 市面上有寫到call by addr的書是錯的
02/19 14:11, 12F

02/19 14:11, , 13F
應該改為call by value摟?
02/19 14:11, 13F

02/19 14:12, , 14F
傳了b的address進來沒有使用, 這沒解釋param passing @@
02/19 14:12, 14F
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 我是覺得這句話跟以下例子矛盾 (即CBV) void f(int a) { a=10; } void main() { int b=5; f(a); } 個人淺見 :p

02/19 14:13, , 15F
很吊詭的是CbA這種講法我現在看到兩種對立的解釋....
02/19 14:13, 15F

02/19 14:14, , 16F
一種是C語言老式的"pass the address by value"的作法
02/19 14:14, 16F

02/19 14:15, , 17F
一種就是說Call by Reference是Call by Address....
02/19 14:15, 17F

02/19 14:15, , 18F
在原文的資料裡目前小弟找不到具體講Call by Address的.
02/19 14:15, 18F

02/19 14:15, , 19F
所以個人覺得搞清楚CbV, CbR, 而by Address盡量不要講.
02/19 14:15, 19F

02/19 14:16, , 20F
或者如果板上有先進有更明確的資料能提供的願聞其詳:)
02/19 14:16, 20F
※ 編輯: walm20 來自: 140.118.126.177 (02/19 14:23) ※ 編輯: walm20 來自: 140.118.126.177 (02/19 14:25)
文章代碼(AID): #19dDVBPa (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #19dDVBPa (C_and_CPP)