Page 1 of 1
Последний элемент массива и include
Posted: 2005-04-28 10:12:09
by Beyonder
Если массив [20] то последний элемент 19? Или 20?
И еще, на форуме уже поднималась такая тема, но толком никто на нее не ответил.
Будут ли в инже инклуды одного скрипта в другой?
А то есть множество нужных во всех скриптах функций, и если бы можно было вынести их все в отдельный файл, то было-бы очень удобно просматривать и понимать скрипты.
Re: Последний элемент массива и include
Posted: 2005-04-28 10:24:24
by Sfagnum
Beyonder wrote:Если массив [20] то последний элемент 19? Или 20?
19
Beyonder wrote:И еще, на форуме уже поднималась такая тема, но толком никто на нее не ответил.
Yoko отписывался на данную тему. поищи.
Posted: 2005-04-29 15:17:53
by Edred
По документации - 19. Фактически - 20, но может в любой момент взглючить, что закончится анхандлед еррор ин парсер.
Posted: 2005-04-30 12:28:40
by Yoko
делать статический массив точно того размера что потребуется, такаяже идиотская затея, как брать точное количество пластиковых стаканчиков на шашлыки
Posted: 2005-04-30 14:40:38
by Destruction
Yoko wrote:делать статический массив точно того размера что потребуется, такаяже идиотская затея, как брать точное количество пластиковых стаканчиков на шашлыки
Ну лучше уж взять точное количество стаканчиков, чем вобще без них

Posted: 2005-04-30 14:50:41
by I'm
Лучше брать с запасом

Posted: 2005-04-30 15:16:34
by Destruction
I'm wrote:Лучше брать с запасом

А мне вот интересно - скажем пишем ходилку, отсканировал путь, нашел препятствия, чтобы их обойти - надо в массив написать дополнитльные направления, сколько их будет - неизвестно, какого же тада размера брать массив?!
Posted: 2005-04-30 17:29:30
by AGRS
Внушительного.

Posted: 2005-05-04 01:37:56
by Destruction
AGRS wrote:Внушительного.

Пасиб конечно, но я сделал по другому, и теперь надеюсь, что длинна строки ничем не ограничена

Posted: 2005-05-04 06:40:23
by AGRS
Ну и правильно. Идея с массивом для таких задач не подходит.

Posted: 2005-05-04 11:49:16
by Beyonder
Еще вопрос. Как реализованы строки в инжекте?
Вопрос чисто для интереса.
Варианты:
а) Как String
b) Как char *
c) Как Vector ?
А насчет точного числа элементов, то иногда бывает надо. Например если я уверен что макс размер не превысит 200, зачем мне брать 201?
Posted: 2005-05-04 15:31:16
by Destruction
Beyonder wrote:Еще вопрос. Как реализованы строки в инжекте?
Вопрос чисто для интереса.
Варианты:
а) Как String
b) Как char *
c) Как Vector ?
А насчет точного числа элементов, то иногда бывает надо. Например если я уверен что макс размер не превысит 200, зачем мне брать 201?
вероятно а.
А чтобы не сглючило.
Posted: 2005-05-04 15:58:58
by Sfagnum
Beyonder wrote:Еще вопрос. Как реализованы строки в инжекте?
Вопрос чисто для интереса.
Варианты:
а) Как String
b) Как char *
c) Как Vector ?
аналогично паскалевскому string, т.е. как масив of char
Posted: 2005-05-05 13:10:10
by Beyonder
Стоп. Чего-то я не понял.
String тип С++ это не массив, это тип похожий на VECTOR (может в основе он и есть)
А массив символов это второй вариант char * который не динамический.
В общем главный интересующий вопрос это как занимаеться им память?
Например:
var Line='Testing big line' #16 символов всего. Память резервируеться на 16 символов или сразу с резервом например на 255?
Line[16]='!' # Запись нового символа в конец. Памяти выделиться еще на один символ или сначала используеться резерв?
Есть ли предел длины строк?
Posted: 2005-05-05 14:20:43
by Fall0ut
>>String тип С++ это не массив, это тип похожий на VECTOR (может в основе он и есть)
1. Масив... вектор.... если ты имеешь ввиду шаблон вектор из СТЛ это одно а если как определние то одномерный масив он и есть вектор....
>>А массив символов это второй вариант char * который не динамический.
2. Бред вообще какой то... масив символов и char * это разные вещи...
char * это указательн а память с типом char ... а масив символов это и есть та память минимальная единица которой равна ... char +) а какая она динамически выделенная или нет... это уже второй вопрос ...
3.Опять таки есть исходный код Йоко инжекта который можно посмотреть на официальной страничке... там есть файлик mystring.c собсвенно там есть класс TString ... и собсвенно говря можно погледять как всё устроено....
Code: Select all
TString::TString(const char * s)
{
Buff=strdup(s);
StringLen = strlen(s);
BuffSize=StringLen+1;
}
вот тебе конструктор .... так что выделяется будет столько сколько надо под конкретную строку.... так что размер я думаю будет ограничен лишь твоим здравым смыслом... ну и тд...
>>Yoko wrote:
>>делать статический массив точно того размера что потребуется, >>такаяже идиотская затея, как брать точное количество пластиковых >>стаканчиков на шашлыки
Ммм если я определяю масив в 20 лэлементов то программа должна зарезервировать столько памяти... если я хочу определить динамическое кол-во элементов чтоб можно было добавлять та или удалять и тд итп.. ну тогда может использовать LinkedList ? или там Stack ? класс... ну это уже совсем другая история +)
Posted: 2005-05-05 14:54:50
by Beyonder
Вообще-то любой массив это указатель.
Вариант 1:
int Array[20];
((*Array) == Array[0]); // Тоесть сам массив являеться указателем на первый его элемент.
Вариант 2:
int *Array;
Array=new int[20];
((*Array) == Array[0]); // Здесь же указатель являеться массивом и указывает на первый элемент так-же как и в предыдущем случае.
Разница между этими примерами лишь в том, что в первом варианте массив есть массив и ничто другое, а во втором, это указатель из которого по желанию можно сделать ничем не отличающийся от первого случая массив.
Причем во множестве программ как на меня удобнее использовать именно char * из-за его динамичности.
А насчет кода, то честно говоря лень было искать и понимать что там написано

.
Posted: 2005-05-05 15:09:35
by Fall0ut
>> использовать именно char * из-за его динамичности.
а ты буквально недавно говрил.... цитирую "А массив символов это второй вариант char * который не динамический."
второе не надо путать понятия языка... с тем как ты решил это обозвать....
Если ты гворишь МАСИВ это область памяти ... если ты гворишь указатель то это переменная содержащая адрес некой области памяти с типом или без него.... вот если ты говришь ИМЯ МАСИВА да имя масива представляет собой типизированый адрес на область памяти занятую этим масивом.... а по поводу...
char bla[0] = '0';
и
char *bla = malloc(100);
bla[0] = '0';
да конечно и там и там в первый элемент размером в один байт будет равен '0' ... но в компиляторе реализация адресациии в данных случиях будет нмного другая... но это к делу мало относится просто когда я гворю МАСИВ я и имею ввиду понятие МАСИВ ... примерно тоже самое когда ты гворил про ВЕКТОР и МАСИВ.... либо больше конкретики.. либо обзывать надо всё своими именами...
Posted: 2005-05-05 17:09:29
by Beyonder
Просто в первом случае я имел ввиду немного не ту динамичность. Просто не нашел другого слова. Я имелл ввиду что такой массив не удлиняем, а в общем я просто запутался в выражениях

.