[問題] 原來這樣寫是沒意義的

看板C_and_CPP作者 (我愛阿蓉)時間16年前 (2009/04/22 18:27), 編輯推噓5(505)
留言10則, 6人參與, 最新討論串1/3 (看更多)
我一直以為 對一個靜態陣列取sizeof 一定可以... 但我剛剛才發現 double pp[20]; init(pp); void init(double array[]) { cout<<sizeof(array); } 原來副程式取 怎麼樣都還是印4 所以說 其實傳遞array 用 array接 根本也跟用*ptr去接是一樣的?? 也都是call by value 複製他的記憶體位置(值) 讓array指到我的pp ,這樣說對嘛? 現在才發現這樣= = 不過這是否意味 根本無法利用副程式 去取得 陣列長度嘛? 一定要自己傳一個數值進去~~ new的應該不可能 我在想 靜態的array 傳給副程式應該是有辦法取得長度吧??? 請各位給點指教thx~~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.207.187

04/23 02:36, , 1F
印象中只要傳至function 陣列的長度都要自己傳過去
04/23 02:36, 1F

04/23 02:44, , 2F
重點在於你傳了什麼東西進去. 你傳的是一個普通指標
04/23 02:44, 2F

04/23 02:46, , 3F
普通指標長度32/8=4還蠻正常的阿
04/23 02:46, 3F

04/23 02:49, , 4F
你的是call by address 你可以再函式內寫修改就知道了
04/23 02:49, 4F

04/23 08:05, , 5F
你參數寫 double a[] 和 double *a 是一樣的意思
04/23 08:05, 5F

04/23 13:23, , 6F
我記得其實沒有什麼call by address嗎? 所以副程式就辦法取得
04/23 13:23, 6F

04/23 13:24, , 7F
長度嚕
04/23 13:24, 7F

04/23 14:11, , 8F
傳過去就是一個pointer....
04/23 14:11, 8F

04/23 14:12, , 9F
長度要自己傳呀
04/23 14:12, 9F

04/24 00:57, , 10F
Q大的推文意思應是「本質上嚴格來說C只有call by value」吧
04/24 00:57, 10F
文章代碼(AID): #19xs6Tzb (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #19xs6Tzb (C_and_CPP)