[問題] 函數 陣列 指標 的相關問題?!

看板C_and_CPP作者 (殺手)時間13年前 (2012/02/25 15:08), 編輯推噓1(1036)
留言37則, 5人參與, 最新討論串1/2 (看更多)
使用 c++ codeblocks 半桶水的我 觀念又糊掉~ 想來請教各位高手 我將問題做成一個簡易的程式碼 http://ideone.com/PmKhU 輸入的資料 可以隨意按 1 & 2 ~ 我的test(), 主要是儲存 Num 和 D陣列的資料 , 然後再丟到一個function做運算! 不明白的部份是 程式的第9行 & 第33行 , 也可以直接在main寫成一行 (如程式碼的第34行) 我想問的是~ 為什麼一定要寫上述的這兩種方式呢? 為什麼不能直接就main裡面就寫 double D[1000] (如程式碼第35行) 直接就給一個陣列 就丟到test()裡面去存資料就好~ (因為陣列不也是一種指標嗎?) 是我觀念錯誤嗎???? 懇請各位高手指點~ 謝謝您~~~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.255.144.92

02/25 15:52, , 1F
你有NEW卻沒有delete,然後直接在 main 造好 array 再傳進
02/25 15:52, 1F

02/25 15:53, , 2F
進去比較好,當然最好還要傳進去陣列元素個數變數
02/25 15:53, 2F

02/25 16:15, , 3F
可能傳進指標在new,能避免越界吧@@
02/25 16:15, 3F

02/25 17:45, , 4F
不是很懂說....@@" 想問說~為什麼不在main直接寫 double D
02/25 17:45, 4F

02/25 18:12, , 5F
當然可以直接傳array啊...
02/25 18:12, 5F

02/25 18:12, , 6F
但你傳array記得傳array大小過去
02/25 18:12, 6F

02/25 18:17, , 7F
http://ideone.com/j2PLP 另外你的num沒初始化
02/25 18:17, 7F

02/25 18:27, , 8F
http://ideone.com/Q5qqw 上面那個有錯,看這個
02/25 18:27, 8F

02/25 19:21, , 9F
可以?! 那為什麼我的程式不可以呢? 我的程式是錯在哪裡呢?
02/25 19:21, 9F

02/25 19:25, , 10F
是因為我又加了 & reference嗎? 因為test()中D所存的資料
02/25 19:25, 10F

02/25 19:26, , 11F
我必須還要再傳到另一個function 所以我加了 &
02/25 19:26, 11F

02/25 20:09, , 12F
我看不到懂你要問什麼
02/25 20:09, 12F

02/25 20:10, , 13F
你想要的是直接宣告好,不用動態?
02/25 20:10, 13F

02/25 20:12, , 14F
http://ideone.com/sYAOu 你要的是像這樣嗎?
02/25 20:12, 14F

02/25 20:12, , 15F
直接宣告好的array不用傳ref,直接用point指向相同
02/25 20:12, 15F

02/25 20:13, , 16F
的開頭就可以了
02/25 20:13, 16F

02/25 22:05, , 17F
d大 謝謝你~ 我是想問 為什麼不能加 & 因為D所存的資料
02/25 22:05, 17F

02/25 22:05, , 18F
還要再傳到下一個function !
02/25 22:05, 18F

02/25 22:06, , 19F
或者應該要問 什麼情況要加 & 上去 就是有這種double *&D
02/25 22:06, 19F

02/25 22:07, , 20F
這種指標形態的 還會再加一個 & 符號
02/25 22:07, 20F

02/25 22:08, , 21F
不知道這樣描述有沒有比較清楚 ><" 抱歉~ XD
02/25 22:08, 21F

02/25 22:09, , 22F
這我就不清楚了,要請其他人回答了
02/25 22:09, 22F

02/25 22:10, , 23F
原po想辦法在描述清楚點,你真正疑惑的點在哪
02/25 22:10, 23F

02/25 22:13, , 24F
那個array不能用*&我猜是因為本身arr就已經是addr了
02/25 22:13, 24F

02/25 22:13, , 25F
但確切原因不確定
02/25 22:13, 25F

02/25 22:14, , 26F
*&直接解讀成call a pointer by ref這樣就好了
02/25 22:14, 26F

02/25 22:15, , 27F
就跟平常call by ref一樣,只是傳的型態是指標而已
02/25 22:15, 27F

02/25 22:15, , 28F
遇到這種情況我幾乎都用**處理
02/25 22:15, 28F

02/25 22:57, , 29F
12戒有你們要的答案
02/25 22:57, 29F

02/25 22:58, , 30F
13戒也有
02/25 22:58, 30F

02/26 09:06, , 31F
a大 想請問 12戒是什麼???
02/26 09:06, 31F

02/26 09:07, , 32F
d大 謝謝你熱心解答~!
02/26 09:07, 32F
我想問的是 D陣列不也是一種指標嗎 那我要將它取ref 丟到test()去做運算 存資料 之後D陣列所存的資料 還會再丟到另一個function去做運算 所以我不懂的點是~ 為什麼不能在 main() 宣告 double D[1000] 然後傳到test()是用 double *&D 沒有這種用法?! ※ 編輯: ieck 來自: 111.255.144.92 (02/26 09:17)

02/26 14:07, , 33F
看不懂你的意思? double *&D -> (double*)& D應該是這
02/26 14:07, 33F

02/26 14:07, , 34F
樣吧
02/26 14:07, 34F

02/26 14:08, , 35F
如果你要在main定義完再傳,應該是test(int []);
02/26 14:08, 35F

02/26 14:08, , 36F
test(D); 這樣吧
02/26 14:08, 36F

02/26 14:12, , 37F
謝謝各位熱心地解答~ 大概有些想法了 我再試試看~ 謝謝您^^
02/26 14:12, 37F
文章代碼(AID): #1FI8ZJe4 (C_and_CPP)
文章代碼(AID): #1FI8ZJe4 (C_and_CPP)