Динамический двумерный массив (Язык C)
Проблема: Нужно создать динамический двумерный массив типа такого: int pg[ size_pg ][ 2 ], где size_pg - задается пользователем. Вот мой код для создания подобного массива:
// Здесь произвольный код
pg = (int**)malloc(size_pg*sizeof(int));
for (k=0; k<size_pg; k++)
{
pg[k]= (int*)malloc(2*sizeof(int));
}
Вопрос: Правильно ли мой код создает подобный массив?
pg = (int*) malloc(size_pg * 2 * sizeof(int));
компилятор выводит ошибку: invalid types "int[int]" for array subscript
Мне именно нужно массив с двумя "индексами".
Ваш код всё правильно создаёт, за исключением того, что в строчке
надо бы заменить sizeof(int) на sizeof(int*).
надо бы заменить sizeof(int) на sizeof(int*).
Совершенно верно, нужно заменить на int*, т.к. если pg требуется реализовать в виде массива с двумя индексами, то pg должен быть указателем на начало массива указателей, каждый из которых является указателем на начало массива переменных int.
Впрочем, могло выйти, что по счастливой случайности переменные int и int* на вашем, Bonez92, компьютере и с использованием вашего компилятора занимают в памяти компьютера одно и то же число байтов (т.е. если у вас выполняется [SIZE="2"][FONT="Courier New"]sizeof(int) == sizeof(int*))[/FONT][/SIZE]. Но лучше на такое совпадение не рассчитывать, т.к. в общем случае [SIZE="2"][FONT="Courier New"]sizeof(<тип переменной>) != sizeof(<тип переменной>*)[/FONT][/SIZE].