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