Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.08;
Скачать: CL | DM;

Вниз

динамические массивы и переменные   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.013 c
1-24058
Dmk
2002-07-24 00:27
2002.08.08
Disable Form DC


8-24130
Mixan
2002-03-30 13:52
2002.08.08
Как сделать бегущий вверх текст (титры) на фоне картинки?


3-23912
maxon
2002-07-15 10:31
2002.08.08
запрос


3-23863
P&$
2002-07-19 13:42
2002.08.08
ODAC - использование TOraQuery


14-24202
Snake bite
2002-07-13 19:50
2002.08.08
С добрым временем суток