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

Ваш аккаунт

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

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

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

Про динамическую распределяемую память

3.2K
29 сентября 2006 года
Gazzy
38 / / 02.08.2006
Здравствуйте.
необходимо создать несколько областей динамически распределяемой памяти(через функцию calloc) и потом извлекать из одной из них значение???
каким образом это лучше осуществить???
309
29 сентября 2006 года
el scorpio
1.1K / / 19.09.2006
Цитата:
необходимо создать несколько областей динамически распределяемой памяти(через функцию calloc)


Использованием нескольких указателей.

 
Код:
const int Ints_Count = 100;
const int Chars_Count = 1000;
int *Integers = calloc (sizeof (int), Ints_Count);
char *Chars = calloc (sizeof (char), Chars_Count);


Цитата:
извлекать из одной из них значение


Путём индексации массива либо по адресу указателя со смещением

 
Код:
int Mid_Int = *(Ints + Ints_Count/2); //Чтение элемента с номером Int_Count/2 по адресу со смещением
char Mid_Char = Chars [Chars_Count/2]; //Чтение элемента с номером Chars_Count/2 индексацией

Если это не то - задавайте вопросы яснее
14K
29 сентября 2006 года
wrap
35 / / 02.06.2006
Тогда уж так:
 
Код:
const int Ints_Count = 100;
const int Chars_Count = 1000;
int *Integers = (int *)calloc (Ints_Count, sizeof (int));
char *Chars = (char *)calloc (Chars_Count, sizeof (char));
3.2K
29 сентября 2006 года
Gazzy
38 / / 02.08.2006
[QUOTE=el scorpio]
 
Код:
const int Ints_Count = 100;
const int Chars_Count = 1000;

[/QUOTE]

а если одного типа (к примеру int)? А возможно создать массив указателей. Выделить на всь массив места calloc-ом. а потом в циклах по очереди заполнять?
14K
30 сентября 2006 года
wrap
35 / / 02.06.2006
Да можно. Только перед заполнением выделить память для соответствующих элементов:
Код:
const int rows= 100; // размер массива указателей
const int cols = 50;

int **pArray = (int **)calloc(rows, sizeof(int *));

if (!pArray)
{
   // ошибка
}

for (int i = 0; i < rows; i++)
{
   pArray = (int *)calloc(cols, sizeof(int));  // выделяем память под массив элементов int
   if (!pArray)
   {
     // ошибка
   }
   for(int j = 0; j < cols; j++)
     pArray[j] = 0xFF; // инициализируем
}
309
30 сентября 2006 года
el scorpio
1.1K / / 19.09.2006
Объявлять именованные константы для размеров массива вместо того, чтобы просто писать цифры в функциях выделения памяти, нужно для того, чтобы при изменении этого размера (например, при отладке), не пришлось потом просматривать весь код в поисках этих цифр (например, в циклах чтения/записи массива)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог