|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
02.01.2010, 14:19 | #1 |
Форумчанин
Регистрация: 04.02.2009
Сообщений: 141
|
Что такое динамически выделенный массив структур?
Знающие люди разъясните пожалуйста на пальцах если можно!=) Что такое динамически выделенный массив структур?Не могу понять..
это: 1)struct mizenat { char name[20]; double donation; }; mizenat* pz = new mizenat[size]; или вот: 2) mizenat pz[size]; |
02.01.2010, 15:52 | #2 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Что такое массив знаешь? Что такое структура данных известно?
При работе прога получает некоторую область памяти, называемую кучей. Структура (в терминах С) это по сути описание информации - где что и как должно быть расположено. В твоем случае под имя выделяется ровно 20 символов не больше и не меньше и только за ним следует donation (а не раньше и не в середине имени). Таким образом команде new заставляет компу сделать пометку что по такому-то адресу (известному как указатель) будет находиться определенное число записей. Точное месторасположение в памяти значение особого не имеет (и при следующем запуске оно может быть другим), но благодаря указателю и на описание твоей структуры можно легко найти требуемую информацию. Теперь почему динамически выделенный. Информация в программе бывает двух видов - динамическая и статическая. Статическая объявляется сразу и программа в момент старта точно знает где, что лежит и как называется, какой размер данных и как с ними работать. Динамическая информация задается в ходе выполнения программы (то есть никто не знает точно сколько нужно информации, например для хранения содержимого файла, он же может быть и пустым и содержать гигабайты информации). Для динамического выделения как правило используют кучу. Кроме того, Вы можете не только задействовать определенную область памяти, но и потом снова вернуть ее в кучу. Допустим считали файл, изменили в нем данные (или не изменили это Ваше дело) и записали его на диск. Теперь место которое занимала информация из файла можно отдать в кучу обратно, для выполнения достижений целей. Современные программы очень сложны и нельзя точно предсказать когда и сколько информации потребуется. Вы могли вообще не загружать файл (допустим, если проверили, что его нет на диске) и т.д.
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика |
02.01.2010, 16:05 | #3 |
Заблокирован
Старожил
Регистрация: 20.07.2008
Сообщений: 4,032
|
Гуглим на malloc
|
02.01.2010, 16:30 | #4 |
Форумчанин
Регистрация: 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; } |
02.01.2010, 16:39 | #5 | |
Заблокирован
Старожил
Регистрация: 20.07.2008
Сообщений: 4,032
|
Во первых оформляем код тегами(кнопочка http://programmersforum.ru/images/1070/editor/code.gif).
Цитата:
Код:
Пересмотрел программу какая-то она у Вас странная 0_О Последний раз редактировалось Levsha100; 02.01.2010 в 16:42. |
|
02.01.2010, 17:58 | #6 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Ты можешь писать ровно столько символов, сколько поместится в строку. И не только имена, комп фактически не контролирует, что ты пишешь. Введи БТР-80 (или терминатор) и он также станет меценатом.
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Массив структур | 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 |