Re: [問題] 關於函數傳遞指標參數的問題
※ 引述《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
03/11 00:38, 1F
→
03/11 00:39, , 2F
03/11 00:39, 2F
→
03/11 00:43, , 3F
03/11 00:43, 3F
→
03/11 01:49, , 4F
03/11 01:49, 4F
討論串 (同標題文章)