Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.01.2010, 14:19   #1
-ushёl-
Форумчанин
 
Аватар для -ushёl-
 
Регистрация: 04.02.2009
Сообщений: 141
Вопрос Что такое динамически выделенный массив структур?

Знающие люди разъясните пожалуйста на пальцах если можно!=) Что такое динамически выделенный массив структур?Не могу понять..
это: 1)struct mizenat
{
char name[20];
double donation;
};


mizenat* pz = new mizenat[size];


или вот:


2) mizenat pz[size];
-ushёl- вне форума Ответить с цитированием
Старый 02.01.2010, 15:52   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Что такое массив знаешь? Что такое структура данных известно?
При работе прога получает некоторую область памяти, называемую кучей. Структура (в терминах С) это по сути описание информации - где что и как должно быть расположено. В твоем случае под имя выделяется ровно 20 символов не больше и не меньше и только за ним следует donation (а не раньше и не в середине имени).
Таким образом команде new заставляет компу сделать пометку что по такому-то адресу (известному как указатель) будет находиться определенное число записей. Точное месторасположение в памяти значение особого не имеет (и при следующем запуске оно может быть другим), но благодаря указателю и на описание твоей структуры можно легко найти требуемую информацию.
Теперь почему динамически выделенный. Информация в программе бывает двух видов - динамическая и статическая. Статическая объявляется сразу и программа в момент старта точно знает где, что лежит и как называется, какой размер данных и как с ними работать.
Динамическая информация задается в ходе выполнения программы (то есть никто не знает точно сколько нужно информации, например для хранения содержимого файла, он же может быть и пустым и содержать гигабайты информации). Для динамического выделения как правило используют кучу. Кроме того, Вы можете не только задействовать определенную область памяти, но и потом снова вернуть ее в кучу. Допустим считали файл, изменили в нем данные (или не изменили это Ваше дело) и записали его на диск. Теперь место которое занимала информация из файла можно отдать в кучу обратно, для выполнения достижений целей. Современные программы очень сложны и нельзя точно предсказать когда и сколько информации потребуется. Вы могли вообще не загружать файл (допустим, если проверили, что его нет на диске) и т.д.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 02.01.2010, 16:05   #3
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,032
По умолчанию

Гуглим на malloc
Изображения
Тип файла: jpg free_the_malloc_s_tshirt-p235328842879388513q6wh_400.jpg (25.7 Кб, 51 просмотров)
Levsha100 вне форума Ответить с цитированием
Старый 02.01.2010, 16:30   #4
-ushёl-
Форумчанин
 
Аватар для -ushёl-
 
Регистрация: 04.02.2009
Сообщений: 141
Вопрос

Так действовать возможно или нет?
#include <cstdlib>
#include <iostream>
#include <string>
struct mizenat
{
std::string name;//Поставил вместо массива строку.
//Подскажите,есть ли возможность читать полные имена допустим Иванов Иван Иванович?
double donation;
};

using namespace std;

int main(int argc, char *argv[])
{
cout<<"vvedite kol-vo mizenatov:";
int size;
cin>>size;
//mizenat pz[size];
mizenat* pz = new mizenat[size];
int i=0;
while(i<size)
{
cout<<"imya: ";
cin>>pz[i].name;
cout<<"summa: ";
cin>>pz[i].donation;
i++;
}
cout<<"\nGrand Patrons:"<<"\n";
for(int i=0;i<size;i++)
if(pz[i].donation>=10000)
{
cout<<pz[i].name<<endl;
cout<<pz[i].donation<<"$"<<endl;

}
else
cout<<"none\n";
cout<<"\nPatrons:"<<"\n";
for(int i=0;i<size;i++)
if(pz[i].donation<10000)
{
cout<<pz[i].name<<endl;
cout<<pz[i].donation<<"$"<<endl;
}
else
cout<<"none\n";
delete[]pz;
system("PAUSE");
return EXIT_SUCCESS;
}
-ushёl- вне форума Ответить с цитированием
Старый 02.01.2010, 16:39   #5
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,032
По умолчанию

Во первых оформляем код тегами(кнопочка http://programmersforum.ru/images/1070/editor/code.gif).

Цитата:
//Подскажите,есть ли возможность читать полные имена допустим Иванов Иван Иванович?
Не понял суть вопроса.
Код:
while(i<size)
Юзаем цикл for.
Пересмотрел программу какая-то она у Вас странная 0_О

Последний раз редактировалось Levsha100; 02.01.2010 в 16:42.
Levsha100 вне форума Ответить с цитированием
Старый 02.01.2010, 17:58   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от -ushёl- Посмотреть сообщение
//Подскажите,есть ли возможность читать полные имена допустим Иванов Иван Иванович?
Ты можешь писать ровно столько символов, сколько поместится в строку. И не только имена, комп фактически не контролирует, что ты пишешь. Введи БТР-80 (или терминатор) и он также станет меценатом.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив структур MLV Общие вопросы C/C++ 6 08.12.2009 20:44
Массив структур velvetdust Общие вопросы C/C++ 0 21.03.2009 13:18
Объясните новичку, что такое массив, если можно своими словами. Maxximuss Помощь студентам 5 26.10.2008 09:26
Динамический массив структур RaZveDchiK Помощь студентам 1 31.08.2008 21:44
то такое мастерство в программировании, что такое мастер программист и что он может? Cezar Свободное общение 29 02.06.2007 23:48