Re: [語法] 回傳一個二維陣列- 看板C_and_CPP
文章推薦指數: 80 %
首先呢,陣列在C/C++ 中並不是first-class object 至少你不能回傳一個陣列但是你可以回傳一個指向陣列的pointer 這是合法的然而C 的語法有個非常奇怪 ...
批踢踢實業坊
›
看板C_and_CPP
關於我們
聯絡資訊
返回看板
作者littleshan(我要加入劍道社!)看板C_and_CPP標題Re:[語法]回傳一個二維陣列時間ThuMay1411:57:352009
※引述《QQ29(我愛阿蓉)》之銘言:
:Q這樣的prototype是OK的傳入一個二維陣列
:但是我想依樣return的型態也寫成跟Q傳入的一樣
:但是怎麼寫就是不給我過~
:原因不明==
:請教各位
:謝謝
首先呢,陣列在C/C++中並不是first-classobject
至少你不能回傳一個陣列
但是你可以回傳一個指向陣列的pointer
這是合法的
然而C的語法有個非常奇怪的地方
那就是宣告陣列時維度要放在變數的後面
intb[10];
而不是這樣
int[10]b;
所以當你宣告某個指向陣列的pointer時,因為operatorpriority
語法會變得更有趣:
int*a[10];//a是一個陣列,元素是int*
int(*b)[10];//b是一個pointer,指向有10個int的陣列
int*[10]c;//語法錯誤,維度要放後面
現在我們來看函式宣告
(int*)[10]f();//錯誤同上,維度要放後面
int*f()[10];//f()回傳一個陣列,元素是int*,
//但C/C++中函式無法回傳陣列!
int(*f())[10];//正確,f()回傳一個pointer,指向某個陣列
光看到這種宣告,我就會想要痛毆寫出這種程式碼的人。
事實上,只要C/C++改用「維度放在前面」的宣告方法,
就可以明顯增加可讀性:
//以下不是合法的C/C++
int[3]a;//a有三個元素
int[3][4]b;//b是個4x3的二維陣列
int[3]*c;//c是個pointer,指向「有三個元素的陣列」
int*[4]d;//d是四個元素組成的陣列,每個元素都是int*
int[3][4]*f();//f()是個函式,回傳的pointer指向4x3的二維陣列
不過這畢竟不是合法的C/C++,所幸我們還有typedef可用:
typedefint(*T)[10];//T的型別就是「指向陣列的pointer」
Tf();//F()回傳一個pointer,指向某個陣列
最後是我誠心的建議:C/C++的陣列很難用,別再動歪腦筋了,
請寫個class包起來用。
--
※發信站:批踢踢實業坊(ptt.cc)
◆From:219.87.151.2
推VictorTom:推l大,小弟也會想痛毆寫那種程式的人....>_int(*)[10]{returnsomething;}/flee05/1413:37
延伸文章資訊
- 1請問大神要怎麼把二維陣列丟入副程式裡執行,以這裡為例。
- 2C++ -傳遞二維陣列 - 小哈的程式工作坊
C++ -傳遞二維陣列(Pass 2D array as a function parameter in C++). 二維陣列到底怎麼傳進函式?指標?還要給數量?到底是ROW 的數量還是COLU...
- 3C / C++ 函式傳遞二維陣列範例與解說 - CHG
template<size_t N, size_t N2> void fun(int (&arr)[N][N2]) {...}; 如此一來就可以完整的傳入鎮列了,在函式內N1 及N2 就是傳入的...
- 4[C/C++] 二維陣列的傳遞
在c裡,陣列傳遞是採用傳址呼叫(call by address or call by pointer), ... funcB() 執行完後,不會把複製的p, q丟回給 main() ,寫成cod...
- 5Re: [語法] 回傳一個二維陣列- 看板C_and_CPP
首先呢,陣列在C/C++ 中並不是first-class object 至少你不能回傳一個陣列但是你可以回傳一個指向陣列的pointer 這是合法的然而C 的語法有個非常奇怪 ...