Re: [問題] 關於函數傳遞指標參數的問題

看板C_and_CPP作者 (朴髮箍)時間14年前 (2011/03/10 17:09), 編輯推噓1(103)
留言4則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《dpqb10 (香菇)》之銘言: : 請問一下,函式如果傳遞陣列當參數就要傳陣列名稱+陣列個數 : 如果產生一個指標p,去指向陣列array[5],也就是p=array : 那傳遞p當參數就變成傳指標呼叫了,傳遞時就直接傳p : 可是p指的是一個陣列,傳遞過去到函式時,他會知道是陣列嗎? : 卻沒有傳遞陣列個數 : 觀念上有很多問題~麻煩大家了 謝謝 引數如果是: 1.放陣列名稱, 你傳的是「指向陣列元素的指標」, 2.放陣列名稱前面加上 &, 你傳的是「指向陣列的指標」 一般比較常見第一種case, 以函式的觀點來說: 它只看得見某一 個變數的位址, 並不知道他和在他之後的元素應該被視為同一個 群組、群組裡元素位置是相鄰的, 還有元素的個數, 第三個資訊 必須要靠額外的參數來給, 前兩個資訊限制了你的函式程式碼在 撰寫上要依賴某種程度上的假設. 第二種case, 因為傳遞的是「指向陣列的指標」, 指標指向的靜 態型別要在編譯的時候就確定下來, 所以這樣寫限制還蠻大的, 參考以下的程式碼: void PrintArrayWith5Elements( int (*pa)[ 5 ] ) { for( size_t i = 0; i != 5; ++i ) printf( "%d ", (*pa)[ i ] ); putchar('\n'); } int main() { int a1[ 5 ] = { 2, 3, 4, 5, 6 }, a2[ 3 ] = { -1, -3, -5 }; PrintArrayWith5Elements( &a1 ); PrintArrayWith5Elements( &a2 ); // error expected 'int (*)[5]' but // argument is of type 'int (*)[3]' return EXIT_SUCCESS; } 用巨集可以改善這種問題, 但只能減少你撰寫新函式的時間, 而 不能「一式多用」 程式碼: http://codepad.org/zq8BNYXC C++ 又是另一個故事了... -- ◢████ ◢█ ◢██◣ ◢█ ◢███ ◢█ T-ara版怎麼去 ████◢█████s ~> T-ara ███ █ ◢██ 歡迎您的光臨 ███████████恩靜智妍孝敏 ███ ██ 素妍居麗寶藍 ████◥██◤ █████花英 ψmakigoto123 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.197.115

03/11 00:38, , 1F
C++ 可以用 template + array reference 做
03/11 00:38, 1F

03/11 00:39, , 2F
不過編出來的 code 可能會很大XD
03/11 00:39, 2F

03/11 00:43, , 3F
而且 C 要這樣寫,那參數直接定 int[5] 比較直接
03/11 00:43, 3F

03/11 01:49, , 4F
C語言這樣寫, 還是會DECAY成指標, 只是會做TYPE CHACK
03/11 01:49, 4F
文章代碼(AID): #1DU9K_zN (C_and_CPP)
文章代碼(AID): #1DU9K_zN (C_and_CPP)