| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Массив через указатель |
| Автор: Kirgston 26.9.2009, 17:50 | ||
| Всем доброго времени суток! Возник такой вот вопросик... собственно как я могу получить доступ через указатель? На Вижуале писал так например: *(dictonary+tmp) в итоге получал какбы dictonary[tmp]. Ну то есть доступ =) А в РАДе когда пишу нечто подобное...
во время трассировки я вижу что в указателе (ну точнее в переменной на которую указывает указатель) dic есть текст. Что , tmp = dic->Pos(enc[i])-zsyv; while (tmp < 1) tmp += dic->Length(); прекрасно работают. Но когда я пытаюсь добавить к dec добавить буквочку из dic то почему то 0 реакции... уже пробовал и через dec.Insert() - абсолютно 0 реакции. То есть какбы... dec попросту пуст... и никакие данные в него не попадали оО Спасибо! |
| Автор: Kirgston 26.9.2009, 22:05 | ||||
Простите а что это?
Да так и есть... только интересно то что в Вижуале оно то всё нормально оО . То есть да там была переменная типа char... но вроде принцип тот же... хотя думаю щас что такое сработает только с чаром =) Просто в книге читал что именно *(dic+tmp) надо делать... ааа ну да... если не ошибаюсь то 1 переменная типа чар = 1 байт. И скажем dic+tmp указывает на начало масива со сдвигом в тмп байт а какраз и выходит какбудто это размерность =) а потом мы это всё разыменовываем и получаем прямой доступ =). А если делать это с Unicode\Ansi String то это уже не катит ибо там уже по другому идет размерность. Я правильно всё понял?
Какраз таки и нужны =) [BCC32 Error] Unit1.cpp(62): E2093 'operator*' not implemented in type 'UnicodeString' for arguments of the same type Full parser context Unit1.cpp(47): parsing: void _fastcall TForm1::Button2Click(TObject *) Вот что мне иначе начинает орать =) А в вашем примере dec += (*dic)[Tmp]; Выходит какбудто... мы разыменовываем указатель аля (*dic) аналогично dictonary (указатель указывает на ету переменную) и тогда уже указываем по индексу тмп. Я всё правильно понял? Спасибо! |
| Автор: Anikmar 27.9.2009, 00:16 | ||
Сокращение от Access violation - нарушение доступа к памяти
Не в размерности дело, а в типе переменных. Если переменная - адрес, например: char *Str; то синтаксис Str[6] аналогичен *(Str + 6) В Вашем случае: UnicodeString dictonary,*dic dic указывает на единственный объект. Нет там никакого массива и при попытке прибавить к указателю число - он смещается на tmp объектов, которых реально нет - т.е. указывает на случайный адрес. В общем почитайте про математические операции с указателями, массивы и т.п. |
| Автор: Kirgston 27.9.2009, 09:52 | ||
Аааа спасибки =) просто в етих сокращениях ещё не сильно разбераюсь
Да вот какраз и читал))))) только там дальше типа char не заходило... потому... какбы они написали так что якобы это и ко всем остальным типам относится. Спасибо большое! |