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了,用两个模板元把不同长度的数组重载开,搞定。记得参数是引用: