> Доброго времени суток
> помогите разобраться..запутался-выделение памяти под двумерный массив
> int **array1 = (int **)malloc(nrows * sizeof(int *));
> for(i = 0; i < nrows; i++)
> array1[i] = (int *)malloc(ncolumns * sizeof(int));
> не могу понять почему мы вначале выделяем память под строки , а
> потом под столбцы Ну можете считать первый индекс столбцом, а второй строками, код от этого не изменится
> т.е
> \\пускай будет char для наглядности
> char **array1 = (char **)malloc(5 * sizeof(char*));
> for(i = 0; i < 5; i++)
> array1[i] = (char *)malloc(3 * sizeof(char));
> получается , что создается
ну как-то так =)
> как то так =)
> имею в виду что я думал
> \\ вначале создается столбец длинной ncolumns
> for (i=0;i<ncolumns;i++)
> *(array+i)
ой, какой-то бред.
Что значит - создается ? Ничего не создается - _выделяется память_.
> \\и каждый указатель в array[i] указывает на выделенную память длинной nrows*sizeof(int**)
Чтобы значение в array[i] было _указателем_ и _указывало на выделенную память_ - её надо выделить, и занести значение адреса в array[i], что и делается в цикле
> for(i = 0; i < nrows; i++)
> array1[i] = (int *)malloc(ncolumns * sizeof(int));
Ну а сначала надо выделить память под array, что делается в
> int **array1 = (int **)malloc(nrows * sizeof(int *));
> подскажите что и как?
Вот как-то так.