我在C中创建一个2D数组,如下所示:
int **arr;
arr = malloc(rows * sizeof(int *));
for (i = 0; i < rows; i++)
arr[i] = malloc(cols * sizeof(int));
现在,我打电话给:
func(arr)
在函数func
中,如何计算行和列维度?
答案 0 :(得分:8)
你无法计算它 - arr
只是一个指向指针的指针,没有更多与之相关的信息(与所有C数组一样)。您必须将维度作为单独的参数传递。
答案 1 :(得分:3)
你做不到。您必须将维度与数组一起传递给函数func(arr)
。
答案 2 :(得分:2)
答案 3 :(得分:0)
解决方法是不直接使用数组,而是使用这样的结构:
struct table{ int ** arr; int rows; int columns; }
然后,您可以创建一个函数,该函数创建表的实例,该实例获取行数和列数,并处理分配。
答案 4 :(得分:0)
正如其他人所说,你做不到。但是,您可能会发现创建一个包含行,列和指针的结构很有用。这将允许您说:
typedef struct { int行; int cols; int **数据; } myDataType;
... FOO(MYDATA的);
void foo(myDataType myData){ for(i = 0; i&lt; myData.rows; i ++){
for(j = 0; j&lt; myData.cols; j ++){ printf(“%d,%d:%d \ n”,i,j,myData.data [i] [j]); } } }
(如果我的语法略有偏差,我道歉; Perl,Java,C#和一些Ruby正在争取肘部空间。)