使用指针在C中查找2D数组的尺寸

时间:2010-03-09 18:39:23

标签: c pointers dynamic-arrays

我在C中创建一个2D数组,如下所示:

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

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

现在,我打电话给:

func(arr)

在函数func中,如何计算行和列维度?

5 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:3)

你做不到。您必须将维度与数组一起传递给函数func(arr)

答案 2 :(得分:2)

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

答案 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正在争取肘部空间。)