Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Динамический двумерный массив (Язык C)

44K
02 декабря 2009 года
Bonez92
37 / / 25.08.2009
Всем привет.
Проблема: Нужно создать динамический двумерный массив типа такого: int pg[ size_pg ][ 2 ], где size_pg - задается пользователем. Вот мой код для создания подобного массива:
 
Код:
int **pg, k;

// Здесь произвольный код

pg = (int**)malloc(size_pg*sizeof(int));
for (k=0; k<size_pg; k++)
{
    pg[k]= (int*)malloc(2*sizeof(int));
   
}


Вопрос: Правильно ли мой код создает подобный массив?
5
02 декабря 2009 года
hardcase
4.5K / / 09.08.2005
Можно и одним непрерывным блоком выделить память:
 
Код:
int *pg;

pg = (int*) malloc(size_pg * 2 * sizeof(int));
44K
02 декабря 2009 года
Bonez92
37 / / 25.08.2009
А если добавить такое обращение:
 
Код:
pg[k][0]=-1;

компилятор выводит ошибку: invalid types "int[int]" for array subscript
Мне именно нужно массив с двумя "индексами".
34K
02 декабря 2009 года
muturgan
96 / / 01.10.2009
Цитата: Bonez92
Вопрос: Правильно ли мой код создает подобный массив?


Ваш код всё правильно создаёт, за исключением того, что в строчке

 
Код:
pg = (int**)malloc(size_pg*sizeof(int));

надо бы заменить sizeof(int) на sizeof(int*).
12K
03 декабря 2009 года
Ghox
297 / / 26.07.2009
Цитата: muturgan
Ваш код всё правильно создаёт, за исключением того, что в строчке
 
Код:
pg = (int**)malloc(size_pg*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].

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог