![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
динамические массивы и переменные [D6]
xyz © (2002-07-25 00:32:00)А вопрос в том, как их использовать.
Вот в Си прямо в нужном месте можно написать
int myint;
и будет переменная. Такое возможно в делфи? или есть другие варианты использования динамических переменных?
Набережных С. (2002-07-26 19:35:00) [1]
> MegaVolt © (26.07.02 11:59)
Я видел. Честное слово.
var
A: array of Word;
Компилятор выделяет 4 байта для хранения указателя и записывает в них нули.
SetLength(A,16);
Компилятор вставляет код, который динамически выделяет 32+12 байт памяти и записывает в А адрес 13-го байта - это и есть первый элемент из 16, и счетчик ссылок массива(4 из 12 служебных байт, остальные - размер выделенной памяти и текущее число элементов)установлен в 1.
var
B: array of Byte;
B:=A;
В В хранится то-же значение, что и в А, т.е. они указывают на одну область памяти, + счетчик ссылок массива увеличен на 1.
А:=nil;
Счетчик ссылок уменьшен на 1.
В:=nil;
Счетчик ссылок обнулен и поэтому выделенные 32+12 байт освобождаются.
Короче, AnsiString в чистом виде.
Вопросы есть? Отлично, пошли пить пиво.
TaiphooN (2002-07-26 14:32:00) [2]Кстати о динамических переменных в Delphi:
Если заглянуть в их описания, то можно увидеть, что на самом деле это статический массив до MaxInt, в котором есть бегунок по которому определяется "сколько элементов в массиве".
MegaVolt (2002-07-26 11:59:00) [3]Тему кто нибудь видел?
evgeg (2002-07-26 08:57:00) [4]> быстро и малый размер Exe( от 25 кБ с визуальными компонентами)
Зто же не настоящий exe.
> + Микрософт более щедрая на Хэлп, чем Борланд.
Лучше меньше да лучше.
int64 (2002-07-26 05:28:00) [5]
> Многие, кто говорят что Васик отстой либо не работали с
> VB и Бейсиком как таковым, а только слышали от кого-то;
>
Ну почемуже. Я вот не работал с VB, а от тех кто работал слышал только хорошее. Вот недавно мне один американский программер (бывший наш), объяснял преймущества VB перед Delphi. Слова из его монолога: COM, DCOM, ActiveX, API, IIS... Причём говорил это с таким видом и интонацией, как-будто это все делфисты и не знают о таких очевидных вещах в преймуществе и не догадываются о наличии того, что он наперечислял. Я его чуть не убил... , ещё и за то, что он получает больше меня в 12 раз. Вместе учились в универе, и все его знания о Delphi ограничиваются знанием о паскале 1991 года.
А ты говоришь: "многие говорят...". Говорят, обычно, ндивидумы которые и не шарят не в чём. Не зависимо, кто на чём пишит.
SPeller (2002-07-26 04:25:00) [6]
> Denvor © (26.07.02 03:03)
> Между прочим, VB не такой уж отстойный язык, хотя большинство
> на него плюётся по старой памяти QBasic
Да кто говорит что он плохой? Он предназначен для _быстрой_ разработки приложений, а так же приложений с базами данных. Так оно и есть. Прога, которую на Васике я написал за месяц, на Дельфях ушло два. Тем более что в последних версиях Винды в стандартных ДЛЛях появились движки VB5 и VB6, что уменьшает вероятность таскать с собой лишний метр. Единственный на мой взгляд недостаток - это малое количество стандартных компонент, что вынуждает использовать ActiveX, а это лишние проблемы при распространении проги.
Что мне всегда в VB нравилось - так это возможность правки кода прямо во время выполнения и возможность изменять ход выполнения. Захотел - пропустил кусок кода, захотел - прогнал его ещё раз.
Многие, кто говорят что Васик отстой либо не работали с VB и Бейсиком как таковым, а только слышали от кого-то; либо работали в школе на QBasic"е в русской редакции, который даже ЕХЕ не позволял делать. А я могу сказать с увереностью, что Васик, а в частности VB язык хороший.
Denvor (2002-07-26 03:03:00) [7]В Хэлпе действительно всё написано и даже примеры приведены, что так редко для Дельфийского Хэлпа. Так что TTCustomDelphiMaster пока что дал самый полный ответ, и ВАСИК к Дэлфи ни при чём. Между прочим, VB не такой уж отстойный язык, хотя большинство на него плюётся по старой памяти QBasic. Если кому-то нравится работать с переменными без их предварительной декларации, то рекоменую: просто, быстро и малый размер Exe( от 25 кБ с визуальными компонентами)+ Микрософт более щедрая на Хэлп, чем Борланд.
Меня вообще бесит отношение Борланда к Хэлпу - сухое описание используемой процедуры и изредка скупенький примерчик. Вот и сиди в инете ночами напролёт.
Правда Делфа более быстрая.
Юрий Зотов (2002-07-26 00:12:00) [8]> А как хорош был Васик ! В любое время, в любом месте, любое значение..
Не только Васик. Многие старые языки не требовали объявления переменных стандартных арифметических типов. Например, в Фортране по умолчанию все необъявоенные переменные, начинающиеся с букв I..M считались целыми, остальные - вещественными.
Удобно? Сначала кажется, что да. А с опытом начинаешь понимать, что нет. Потому что это порождало кучу ошибок - достаточно было лишь случайно ошибиться в набивке.
А PL/1 (был такой язык, сложный и мощный), например, запросто преобразовывал любой тип данных к любому другому. Строку в число? Нет проблем - по ее внутреннему представлению. Обратно? То же самое.
Удобно? Поначалу - да. Потом, опять же, нет.
В общем, могу сказать, что когда я перешел на Паскаль (а к тому времени уже имел около 20 лет программистского стажа и соответстствующий опыт), то моментально оценил его замечательное свойство - СТРОГОСТЬ. Если бы не оно, ошибок в программах было бы намного больше.
Так что "вольности" Си можно рассматривать двояко - и как достоинство, и как недостаток языка.
Просто Си ИЗНАЧАЛЬНО делался, как язык СИСТЕМНЫХ программистов - то есть, людей весьма опытных и явных плюх не допускающих. Потому в нем и позволяются разные навороты, что он был рассчитан на другой контингент. Контингент сменился (увы, в более слабую сторону), а традиции остались.
В Паскале же - наоборот. И очень хорошо.
TTCustomDelphiMaster (2002-07-25 22:27:00) [9]F1 - Dynamic arrays
xyz (2002-07-25 22:01:00) [10]так, но все же понятие динамического массива в делфи есть...
МОЖЕТ КТО-НИТЬ РАССКАЖЕТ?
Ну в самом деле)))
TTCustomDelphiMaster (2002-07-25 14:12:00) [11]
> AlexanderVasjuk © (25.07.02 13:22)
> TTCustomDelphiMaster © (25.07.02 11:10)
> Просто заносится число в регистр процессора и операции внутри
> цикла выполняются пока значение регистра не достигнет 0.
>
> А я дурак часто использую счетчик цикла как индекс массива...
Ну и что? Где вы видите противоречие или проблему?
SPeller (2002-07-25 14:11:00) [12]
> AlexanderVasjuk © (25.07.02 13:22)
> Variant решит проблемы с любым значением (и лишней скоростью)...
Зато разговариваешь с ним легко, что захотелось написать, то и написал. А как он тебя поймёт уже другое дело.. :)
AlexanderVasjuk (2002-07-25 13:22:00) [13]TTCustomDelphiMaster © (25.07.02 11:10)
Просто заносится число в регистр процессора и операции внутри цикла выполняются пока значение регистра не достигнет 0.
А я дурак часто использую счетчик цикла как индекс массива...
Viewer (25.07.02 11:11)
А как хорош был Васик ! В любое время, в любом месте, любое значение..
Variant решит проблемы с любым значением (и лишней скоростью)...
SPeller (2002-07-25 13:03:00) [14]
> Viewer (25.07.02 11:11)
> А как хорош был Васик ! В любое время, в любом месте, любое
> значение..
:-)))
Viewer (2002-07-25 11:11:00) [15]А как хорош был Васик ! В любое время, в любом месте, любое значение..
TTCustomDelphiMaster (2002-07-25 11:10:00) [16]
> Толик © (25.07.02 10:13)
> если мне нужна переменная только как счётчик цикла for i
> := 0 to ... зачем мне её объявлять для всей функции?
смотри Юрий Зотов © (25.07.02 01:09)
> попытке её использования вне цикла сама Делфя ругается:
> "for-loop variable may be undefined after loop"
Если переменная используется только как счетчик цикла, то память под нее не выделяется. Просто заносится число в регистр процессора и операции внутри цикла выполняются пока значение регистра не достигнет 0. Просле выхода из цикла в этом регистре может быть все что угодно, о чем и сообщает компилятор.
Виктор Щербаков (2002-07-25 10:30:00) [17]
> Тем более, что при попытке её использования вне цикла сама
> Делфя ругается: "for-loop variable may be undefined after
> loop".
Делфя ругается не при попытке использования переменной, а при попытке использования её значения.
Толик (2002-07-25 10:13:00) [18]Есть ещё конечно вариант с объявлением указателя и выделением под него памяти в нужном месте.
P.S. Позволю себе не согласится с KilkennyCat © (25.07.02 01:09) насчёт недостатка: если мне нужна переменная только как счётчик цикла for i := 0 to ... зачем мне её объявлять для всей функции? Тем более, что при попытке её использования вне цикла сама Делфя ругается: "for-loop variable may be undefined after loop". Так что в C++ это не недостаток, а преимущество, imho. Впрочем, это уже тема для другого обсуждения...
KilkennyCat (2002-07-25 01:09:00) [19]В делфи тоже можно. но переменная работает только в процедурах, ниже описания переменной, и описывать ее можно только между процедурами.
А вообще, в Си - это недостаток, а не достоинство.
Юрий Зотов (2002-07-25 01:09:00) [20]В Deplhi так нельзя. Другой язык - другой синтаксис. Существуют разделы описаний переменных, там все и объявляется. Сишного понятия "динамическая переменная" в Паскале нет.