Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.006 c
3-23914
FLIZ
2002-07-18 10:54
2002.08.08
Как выполнить V.Basic-ский код, хранящейся в базе Access ?


14-24170
VS2001
2002-07-04 06:41
2002.08.08
У кого нибудь есть откомпилированные DesignEditors, DesignIntf ..


1-24117
romik-delphi6
2002-07-26 13:59
2002.08.08
Сохранение параметров


3-23932
Андрусь
2002-07-17 19:16
2002.08.08
Проблема с редактированием 2х таблиц


6-24155
niko4615
2002-05-29 10:28
2002.08.08
URL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский