1

我在 C 中创建了一个二维数组,如下所示:

int **arr;
arr = malloc(rows * sizeof(int *));

for (i = 0; i < rows; i++)
    arr[i] = malloc(cols * sizeof(int));

现在,我打电话:

func(arr)

在函数func中,我如何计算行和列的尺寸?

4

5 回答 5

8

您无法计算它 -arr只是一个指向指针的指针,没有更多相关信息(与所有 C 数组一样)。您必须将尺寸作为单独的参数传递。

于 2010-03-09T18:43:12.160 回答
3

你不能。您必须将尺寸与数组一起传递给函数func(arr)

于 2010-03-09T18:43:39.523 回答
2

你不能(C的美丽)。(并且不要尝试使用 sizeof,因为那只会给您指针的大小)如果另一个函数需要知道数组的尺寸,您必须将这些参数(高度和宽度)作为参数传递与数组指针。

于 2010-03-09T18:43:50.497 回答
0

解决方法是不直接使用数组,而是使用这样的结构:

结构表{
    int ** arr;
    整数行;
    整数列;
}

然后,您可以拥有一个函数,该函数创建表的实例,该实例采用行数和列数,并处理分配。

于 2010-03-09T19:02:16.043 回答
0

正如其他人所说,你不能。但是,您可能会发现创建一个包含行、列和指针的结构很有用。这将允许你说:

typedef struct { int 行;整数列;int **数据;} 我的数据类型;

... 富(我的数据);

void foo(myDataType myData) { for( i = 0; i < myData.rows; i++) {
for( j = 0; j < myData.cols; j++ ) { printf("%d,%d: %d\n ", i, j, myData.data[i][j]); } } }

(如果我的语法稍有偏差,我深表歉意;Perl、Java、C# 和一点 Ruby 正在争夺肘部空间。)

于 2010-03-09T19:05:41.277 回答