public int[][] getInfo() {
int[][] result = new int[10][20];
return result;
}
public void main() {
int[][] result = getInfo();
System.out.println("结果长度:" + result.length);
for (int i = 0; i < result.length; i++) {
for (int j = 0; j < result.length; j++) {
System.out.println(result[i][j]);
}
}
}
上面是一段java的代码,功能就是获取返回的二维数组,并输出二维数组的大小,并遍历数组的内容,前提是我并不知道返回来得数组大小。
如何把它翻译成C语言?其实我就是想理解C语言如何返回二维数组,如何获取数组的大小。
例如,用點黑魔法之類的(C語言的黑魔法當然就是宏+指針)。之前就有人提出將一個陣列的長度記在首位址前。
這種方法相較於起回傳一個結構體指標有三個好處:
元資訊結構體對使用者是隱藏的(有點像是物件導向裡的私有域),這裡array_length是宏所以可寫,改寫成函數就是只讀了
可以用傳統的
[]
運算子直接取偏移,而不需要先解引用之類的還有一個就是,如果回傳一個結構體,相當於要動態分配兩次,記憶體管理起來更加麻煩。這裡只需要
malloc
一次,然後釋放一次就好了。C++的話就不用費事用vector了,用兩個模板元把不同長度的陣列重載開,搞定。記得參數是引用:
給樓主一個方法,我測試出來的,如果報錯請依照環境調試
因你是寫java的,我只能從簡解釋:
簡單方法:C語言可修改函數參數所指的值,可以透過函數參數傳回二維數組的行數和列數。
第二種方法:定義一個結構體,存放二維數組的指針,行數和列數,getInfo分配這個結構,賦值,並傳回此結構的指針。
C 的數據(不管幾維)都是用指針表示的,單純的指針並不能描述數據的長度,所以無論如何都需要返回至少兩個數據,問題在於function 只能返回一個數據,那麼,常見的有以下兩種方案
定義一個結構體來包含兩個數據,例如
直接在函數中定義指標參數來傳回
好複雜的感覺!
把getInfo寫成一個標準的 分配記憶體 的函數. 主要是 做指標 cast的時候費點勁.
使用vector吧; > vt;
vector
函數最後透過物件回傳vt後,可以在main函數中透過.size()取到各個維度的元素;