Нахождение размеров двумерного массива в C с помощью указателей - PullRequest
1 голос
/ 09 марта 2010

Я создаю 2D массив в C следующим образом:

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

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

Теперь я звоню:

func(arr)

Как вычислить размеры строк и столбцов в функции func?

Ответы [ 5 ]

8 голосов
/ 09 марта 2010

Вы не можете рассчитать его - arr это просто указатель на указатель, с ним больше нет информации (как со всеми массивами C). Вы должны передать размеры в качестве отдельных аргументов.

3 голосов
/ 09 марта 2010

Вы не можете. Вы должны передать размеры вместе с вашим массивом в функцию func(arr).

2 голосов
/ 09 марта 2010

ты не можешь (красота С). (и не пытайтесь использовать sizeof, потому что это даст вам только размер указателя) Если другой функции нужно знать размеры массива, вам придется передать эти параметры (высоту и ширину) в качестве аргументов с указателем массива.

0 голосов
/ 09 марта 2010

Как все говорили, вы не можете. Однако может оказаться полезным создать структуру, содержащую строку, столбец и указатель вместе. Это позволит вам сказать:

typedef struct { int row; int cols; int ** data; } myDataType;

... Foo (MyData);

void foo (myDataType myData) { for (i = 0; i для (j = 0; j

(Я прошу прощения, если мой синтаксис немного не в порядке; Perl, Java, C # и немного Ruby шутят по поводу локтевого пространства.)

0 голосов
/ 09 марта 2010

Обходной путь для этого состоит в том, чтобы не использовать массив напрямую, а вместо этого иметь структуру, подобную этой:

struct table{
    int ** arr;
    int rows;
    int columns;
}

Затем вы можете иметь функцию, которая создает экземпляры таблицы, которая принимает количество строк и столбцов и обрабатывает выделение.

...