我在 C 中创建了一个二维数组,如下所示:
int **arr;
arr = malloc(rows * sizeof(int *));
for (i = 0; i < rows; i++)
arr[i] = malloc(cols * sizeof(int));
现在,我打电话:
func(arr)
在函数func
中,我如何计算行和列的尺寸?
我在 C 中创建了一个二维数组,如下所示:
int **arr;
arr = malloc(rows * sizeof(int *));
for (i = 0; i < rows; i++)
arr[i] = malloc(cols * sizeof(int));
现在,我打电话:
func(arr)
在函数func
中,我如何计算行和列的尺寸?
您无法计算它 -arr
只是一个指向指针的指针,没有更多相关信息(与所有 C 数组一样)。您必须将尺寸作为单独的参数传递。
你不能。您必须将尺寸与数组一起传递给函数func(arr)
。
你不能(C的美丽)。(并且不要尝试使用 sizeof,因为那只会给您指针的大小)如果另一个函数需要知道数组的尺寸,您必须将这些参数(高度和宽度)作为参数传递与数组指针。
解决方法是不直接使用数组,而是使用这样的结构:
结构表{ int ** arr; 整数行; 整数列; }
然后,您可以拥有一个函数,该函数创建表的实例,该实例采用行数和列数,并处理分配。
正如其他人所说,你不能。但是,您可能会发现创建一个包含行、列和指针的结构很有用。这将允许你说:
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 正在争夺肘部空间。)