Текущий архив: 2011.12.04;
Скачать: CL | DM;
Вниз
Указатель на Array Найти похожие ветки
← →
rammic © (2011-08-14 15:50) [0]Со смирением прошу ответить. Как в Delphi указатель на Array of Real
переводится на заданный элемент массива. Если в С++ это получается
если написать р[i] то в Delphi 1й элемент он показывает а любой другой
не хочет.
← →
Ega23 © (2011-08-14 16:29) [1]Шаблон затрещал.
Переведи на русский.
← →
Юрий Зотов © (2011-08-14 17:48) [2]> rammic © (14.08.11 15:50)
Не нужно указателя. В Delphi это делается проще:
var
P: array[0..9] of extended; // real - устаревший тип.
...
for i := 0 to 9 do
P[i] := 1;
Или с динамическим массивом:
type
TP: array of extended;
var
P: TP;
...
SetLength(P, 10);
for i := 0 to 9 do
P[i] := 1;
← →
rammic © (2011-08-14 17:51) [3]Есть 2 массива, в зависимости от состояния Checkbox нужно обрабатывать
элементы одного или другого, Чтобы не писать много раз if. я хочу
указателю присвоить адрес нужного и через него иметь доступ к любому
его элементу, но не знаю как получить дальше первого элемента
← →
Дмитрий Белькевич (2011-08-14 18:00) [4]>Есть 2 массива, в зависимости от состояния Checkbox нужно обрабатывать
элементы одного или другого
type
TDAExt = array of extended;
var
Arr1, Arr2, Temp: TDAExt;
begin
if Checkbox1.Checked then
Temp := Arr1
else
Temp := Arr2;
with Temp do
begin
end;
end;
?
← →
Ega23 © (2011-08-14 21:24) [5]
var
arr: array[False..True] of array of Integer;
begin
arr[CheckBox1.Checked] ...
end;
← →
Псарь (2011-08-14 21:59) [6]
> Ega23 © (14.08.11 21:24) [5]
Можно через IfThen или так ещё:
var
arr: array[boolean] of array of Integer;
begin
arr[CheckBox1.Checked] ...
end;
← →
Loginov Dmitry © (2011-08-14 23:05) [7]
> Если в С++ это получается
> если написать р[i] то
> я хочу
> указателю присвоить адрес нужного и через него иметь доступ
> к любому
> его элементу, но не знаю как получить дальше первого элемента
В С++ с указателями уже разобрался?
Тогда обрадую. Указатели в дельфи от сишных ничем не отличаются. Если же не разбирался, тогда для чего нужно было приплетать здесь С++?
> Чтобы не писать много раз if...
Зачем писать одно и то же много раз? Один раз напиши.
← →
rammic © (2011-08-14 23:21) [8]Все-таки. как через указатель на массив получить i-й элемент массива?
← →
Inovet © (2011-08-14 23:23) [9]> [8] rammic © (14.08.11 23:21)
> Все-таки. как через указатель на массив получить i-й элемент массива?
Вот те раз.
← →
Игорь Шевченко © (2011-08-14 23:28) [10]
> Все-таки. как через указатель на массив получить i-й элемент
> массива?
если через "указатель на массив", то почти как в C, P^[i], при условии, что P имеет тип ^array [границы] of type.
иначе как в [2]
← →
rammic © (2011-08-15 00:00) [11]Пишу:
const
arr : array[0..2] of extended = (1.3,0.3,5.4);
procedure TForm1.Button1Click(Sender: TObject);
var
p : ^extended;
a : extended;
begin
p:= @arr;
a:= p^[1];
end;
Получаю
[Error] Unit1.pas(36): Array type required
Понимаю, что делаю какую- то глупую ошибку.
← →
sniknik © (2011-08-15 00:12) [12]> [Error] Unit1.pas(36): Array type required
указатель это ни разу не массив... не нужно смешивать синтаксисы.
> делаю какую- то глупую ошибку.
не глупую, идиотскую... пытаешься писать на С в дельфи.
в 2 хорошие примеры, чем не устраивает?
← →
Дмитрий Белькевич (2011-08-15 00:16) [13]p у тебя указатель на extended, а нужно сделать указатель на массив extended"ов. А вообще - указатели тебе вообще не нужны, думается.
← →
Плохиш © (2011-08-15 00:23) [14]
> rammic © (15.08.11 00:00) [11]
Зачем спрашиваешь, если ответы тебя не интересуют?
← →
Германн © (2011-08-15 01:32) [15]
> rammic © (14.08.11 15:50)
>
> Со смирением прошу ответить.
А Паскаль ака Дельфи "строгий язык" в отличие от Си. И арифметику указателей не очень любит, хотя и приходится иногда.
← →
Ega23 © (2011-08-15 08:52) [16]
> И арифметику указателей не очень любит
С чего это???
← →
Anatoly Podgoretsky © (2011-08-15 09:09) [17]> Ega23 (15.08.2011 08:52:16) [16]
Ограничена символьными указателями
> You can use the + and - operators to increment and decrement the offset of
> a character pointer. You can also use - to calculate the difference
> between the offsets of two character pointers.
А общее только операция разименования.
← →
icWasya © (2011-08-15 09:30) [18]Пара костылей
type
PExtended = ^Extended; // указатель на единственный Extended
TExtendedArray = array [0..MaxInt div Sizeof(Extended)-1] of Extended;
PExtendedArray=^TExtendedArray; // почти то, что нужноconst
arr : array[0..2] of extended = (1.3,0.3,5.4);
procedure TForm1.Button1Click(Sender: TObject);
var
p : PExtendedArray;
a : extended;
begin
p:= @arr;
a:= p^[1]; // теперь должно работать
end;
но чтобы работать по Сишному, модно сделать такconst
arr : array[0..2] of extended = (1.3,0.3,5.4);
procedure TForm1.Button1Click(Sender: TObject);
var
p : ^Extended; // всё таки так
a : extended;
I:Integer;
begin
p:= @arr;
a:=0;
for I:=0 to 2 do begin
a:=a+ p^;
Inc(p); // почти p++
end;
end;
← →
Ega23 © (2011-08-15 09:32) [19]
> Ограничена символьными указателями
Есть Inc и Dec. Если чё.
← →
sniknik © (2011-08-15 09:38) [20]> Пара костылей
ага, раз уж привык "на костылях" то ходи на них всю жизнь, не вздумай переучиваться, даже если "выздоровел"...
и в итоге сгенеренный asm код будет ничем не лучше, а скорее хуже чем из [2]. но это даже неплохо... даст повод поругать дельфи в стиле "ну и гадость эта ваша заливная рыба".
← →
rammic © (2011-08-15 12:52) [21]Похоже, сам того не желая, по своей малограмотности затронул слабое
место Delphi. Выходит что нужно вместо 2-х массивов иметь дело с тремя,
причем третий - искусственный - копия одного из нужных, или вместо 2-х простых массивов делать один многомерный, или писать много type -ов.
← →
RWolf © (2011-08-15 13:07) [22]
> [21]
Бред.
← →
Dennis I. Komarov © (2011-08-15 13:08) [23]
> Похоже, сам того не желая, по своей малограмотности затронул
> слабое
> место Delphi.
Похоже на "X, Y, Z"
← →
Dennis I. Komarov © (2011-08-15 13:08) [24]
> Бред.
С пометкой "опасный"
← →
rammic © (2011-08-15 13:25) [25]Прошу не скандалить, мне казалось, что все будет проще.
← →
sniknik © (2011-08-15 13:28) [26]> слабое место Delphi.
это слабое место слабых умов...
при нескольких вариантах игнорировать нормальные, выбрать самый извращенный, и после злорадствовать, "а, вот! не может он так..."
------------------------
Купили суровые русские мужики японскую бензопилу, начали ее испытывать, в пилу щепку
- Вжик! - сказала пила и распилила щепку.
- А-а, б**! - сказали суровые русские мужики и засунули в пилу доску.
- Вжжик! - сказала пила и распилила доску.
- У-у, б**! - сказали суровые русские мужики и засунули в пилу бревно.
- Вжжжжик! - сказала пила и распилила бревно.
- У-у, б**!!! - сказали суровые русские мужики и засунули в пилу рельс.
- Хррр-дзинь - сказала пила и сломалась.
- Ах-ха, б**... - сказали суровые русские мужики и пошли валить лес топорами.
← →
sniknik © (2011-08-15 13:29) [27]> мне казалось, что все будет проще.
ЧТО СЛОЖНОГО в [2]?????????????
← →
RWolf © (2011-08-15 13:44) [28]зачем копировать массивы?
чем объявление двумерного константного массива хуже объявления двух одномерных?
зачем вообще думать в сторону адресной арифметики? компилятор не сможет проверить её корректность, в отличие от индексации массивов.
← →
rammic © (2011-08-15 13:47) [29]Насколько я понял, возможно неверно, Юрий Зотов предлагает сделать
копию нужного массива и работать с ней. Конечно. это просто. Я так и
думал сделать, но надеялся что мне посоветуют что-то интереснее.
← →
Ega23 © (2011-08-15 13:53) [30]
> Я так и думал сделать, но надеялся что мне посоветуют что-то интереснее.
Убей себя, спаси мир.
Впрочем нет, не убивай. Пойди работать. Моя зарплата вырастет, если таких как ты будет много.
← →
RWolf © (2011-08-15 14:05) [31]
> [29]
мне задача представляется как-то так:type
PMyData = ^TMyData;
TMyData = array[0..9] of Extended;
var
MyData:array[Boolean] of TMyData = (
(1.1, 2.2, …),
(5.5, 6.7, …)
);
function ConquerTheWorldWith(const AData: TMyData);
begin
…
end;
…
ConquerTheWorldWith(MyData[Checkbox1.Checked]);
← →
sniknik © (2011-08-15 14:29) [32]> сделать копию нужного массива и работать с ней.
откуда "дровишки"? в [2] нет ни копий, ни советов их сделать...
> но надеялся что мне посоветуют что-то интереснее.
и как это возможно если задачи нет? а то, что есть требует перевода на русский.
← →
sniknik © (2011-08-15 14:32) [33]> мне задача представляется как-то так:
вы бы поостереглись давать код человеку не знающему основ... он же все воспринимает через "кривое зеркало своего представления"... очень кривое, в дельфи ничего не знает, в С думает что знает.
сейчас опять будут выводы в стиле "гадости заливной рыбы".
← →
rammic © (2011-08-15 14:49) [34]Мои познания в Си и Дельфи незначительные, поэтому я и задаю свои
вопросы. Буду очень благодарен если мне объяснят что я не понял в совете
Юрия Зотова.
← →
Юрий Зотов © (2011-08-15 15:02) [35]> rammic © (15.08.11 13:47) [29]
> Юрий Зотов предлагает сделать копию нужного массива и работать с ней.
Я долго искал, где же я это предлагал. Не нашел.
Работа с указателями в Delphi НИЧЕМ, КРОМЕ СИНТАКСИСА не отличается от работы с укзателями в C. И без всяких "слабых мест". Нет там никаких слабых мест - все ТО ЖЕ САМОЕ, что и в С.
В [11] Вы уже сами все написали. С единственной ошибкой, на которую Вам уже тоже указали в [13]. Что же еще нужно-то?
type
TArr : array[0..2] of extended;
PArr = ^TArr;
const
arr : TArr = (1.3,0.3,5.4);
procedure TForm1.Button1Click(Sender: TObject);
var
p : PArr; // Нам нужен указатель на МАССИВ, а не на extended
a : extended;
begin
p:= @arr;
a:= p^[1];
end;
← →
Юрий Зотов © (2011-08-15 15:04) [36]Поправка:
TArr = array[0..2] of extended;
← →
sniknik © (2011-08-15 15:17) [37]> Буду очень благодарен если мне объяснят что я не понял в совете
> Юрия Зотова.
самое главное, и не обязательно в совете Юрия Зотова ты не понял/нимаешь одно... никто кроме тебя не знает, что именно ты не понял, и чего именно "нарешал/навыдумывал" глядя на очевидные (для знающих) основы примеры.
т.е. не спрашивай чего ТЫ НЕ ПОНЯЛ, а напиши, что понял и как... и тогда возможно тебе объяснять где ты не прав.
вот откуда взял, что советуют сделать копию???? ведь там ни слов, ни действий копирования, ничего похожего нет, есть пример адресации без указателей про которые у тебя и был вопрос.... но почему то его ты посчитал "неотвеченным", а пример за совет копирования НУ ВОТ ОТКУДА????
← →
sniknik © (2011-08-15 15:22) [38]>
p : PArr; // Нам нужен указатель на МАССИВ, а не на extended
какая разница, пусть было бы указателем на extendedconst
arr : array[0..2] of extended = (1.3,0.3,5.4);
procedure TForm1.Button1Click(Sender: TObject);
var
p : ^extended;
a : extended;
begin
p:= @arr;
a:= p^;
end;
то же самое. раз уж хочется через указатели. но они же попросту не нужны, как собаке пятая нога... (это не вообще, а применительно к "тут")
← →
rammic © (2011-08-15 15:25) [39]Спасибо, теперь все понятно. Прошу прощения за глупость и назойливость.
← →
rammic © (2011-08-15 15:47) [40]Понятно как сделать с указателями, но что такое адресация без указателей
не понятно. В совете [2] я не понял зачем всем элементам массива
присваивать 1. Ведь массив уже есть. Мне нужно брать из него заданный
элемент.
← →
DiamondShark © (2011-08-15 15:58) [41]
> В совете [2] я не понял зачем всем элементам массиваприсваивать 1
facepalm.jpg
← →
Юрий Зотов © (2011-08-15 16:00) [42]> rammic © (15.08.11 15:25) [39]
Для полноты картины:
В обоих конструкциях [35] и [38] переменная p будет содержать адрес НУЛЕВОГО элемента массива (потому что он совпадает с адресом самого массива).
Но в конструкции [38] мы сказали компилятору, что переменная p указывает на число, а не на массив. А применить индекс к ЧИСЛУ мы не можем, поэтому переменная a будет содержать НУЛЕВОЙ элемент массива.
А в конструкции [35] мы сказали компилятору, что переменная p указывает на сам массив. Поэтому мы можем применить индекс и переменная a будет содержать ПЕРВЫЙ элемент массива, так как явно указан индекс 1.
Но и в конструкции [38] тоже можно получить i-й элемент массива, только для этого придется применить адресную арифметику и вычислить его адрес ручками:
type
TExt = packedarray[0..2] of extended;
PExt = ^TExt;
const
arr : TExt = (1.3,0.3,5.4);
procedure TForm1.Button1Click(Sender: TObject);
var
p : PExt;
a : extended;
i : integer;
begin
i := 1;
p := PExt(Integer(@arr) + i * SizeOf(Extended));
a := p^;
end;
← →
Anatoly Podgoretsky © (2011-08-15 16:08) [43]> rammic (15.08.2011 15:47:40) [40]
Они есть, но только за сценой
← →
rammic © (2011-08-15 16:12) [44]
> Юрий Зотов © (15.08.11 16:00) [42]
Списибо, но теперь я хочу понять Ваш совет[2]
← →
Юрий Зотов © (2011-08-15 16:40) [45]
> rammic © (15.08.11 16:12) [44]
> теперь я хочу понять Ваш совет[2]
Для этого нужно перечитать вопрос [0] и убедиться, что ни о каких двух массивах и о переключении между ними внем речи не идет, а спрашивается ТОЛЬКО о том, "как в Delphi указатель на Array of Real переводится на заданный элемент массива".
Поэтому в [2] и было сказано, что получить доступ к заданному элементу можно проще, без указателей.
← →
rammic © (2011-08-15 18:15) [46]Всем спасибо!
← →
Германн © (2011-08-16 00:12) [47]
> Ega23 © (15.08.11 09:32) [19]
>
>
> > Ограничена символьными указателями
>
> Есть Inc и Dec. Если чё.
>
Хм. Действительно для типизированных указателей есть.
Только вот объяснил бы кто мне как они в этом случае работают?
← →
Германн © (2011-08-16 00:20) [48]
> Только вот объяснил бы кто мне как они в этом случае работают?
А. Кажись понял. Но это совсем не та арифметика, которая в Си. Или я ошибаюсь?
← →
Юрий Зотов © (2011-08-16 00:26) [49]> Германн © (16.08.11 00:12) [47]
Inc - увеличивает указатель на размер адресуемого им типа данных, умноженный на второй аргумент.
Dec - уменьшает на ту же величину.
Например:
var
P: PInteger;
D: integer;
begin
D := 1;
P := @D;
Inc(P, 2); // Или P := PInteger (Integer(P) + 2 * SizeOf(Integer))
end;
Поскольку размер адресуемых данных у нетипизированных указателей не определен, функции Inc и Dec к ним неприменимы.
← →
Юрий Зотов © (2011-08-16 00:28) [50]
> Германн © (16.08.11 00:20) [48]
> Но это совсем не та арифметика, которая в Си.
Адресная арифметика - она одна и от языка не зависит. Разный только синтаксис.
← →
Германн © (2011-08-16 01:02) [51]
> Юрий Зотов © (16.08.11 00:26) [49]
>
> > Германн © (16.08.11 00:12) [47]
>
> Inc - увеличивает указатель на размер адресуемого им типа
> данных, умноженный на второй аргумент.
>
> Dec - уменьшает на ту же величину.
>
Это-то как раз я и понял.
Но в Си, если мне не изменяет мой склероз, разрешены простые арифметические операции над указателями. Которые не зависят от того, на что данный указатель указывает.
← →
Ega23 © (2011-08-16 08:35) [52]
> Но в Си, если мне не изменяет мой склероз, разрешены простые
> арифметические операции над указателями. Которые не зависят
> от того, на что данный указатель указывает.
procedure TForm8.Button1Click(Sender: TObject);
var
i: Integer;
p: PInteger;
arr: array[0..1] of Integer;
begin
arr[0] := $44332211;
arr[1] := $88776655;
p := @arr[0];
for i := 1 to 4 do
begin
Cardinal(p) := Cardinal(p) + 1;
Memo1.Lines.Add(IntToHex(p^, 8));
end;
end;
← →
Юрий Зотов © (2011-08-16 08:40) [53]
> Германн © (16.08.11 01:02) [51]
> Но в Си, если мне не изменяет мой склероз, разрешены простые
> арифметические операции над указателями. Которые не зависят
> от того, на что данный указатель указывает.
В Delphi их тоже никто не запрещал. Надо только привести типы.
← →
Вариант (2011-08-16 08:48) [54]
> Ega23 © (16.08.11 08:35) [52]
Это совсем не эквивалент*(p+1)
, впрочем Inc и Dec вполне хватает, о чем ты уже писал выше.
← →
Ega23 © (2011-08-16 08:53) [55]
> Это совсем не эквивалент *(p+1)Cardinal(p) := Cardinal(p) + 1;
Те же яйца, только сбоку.
← →
Юрий Зотов © (2011-08-16 08:58) [56]
> Вариант (16.08.11 08:48) [54]
> Это совсем не эквивалент *(p+1),
А в чем различие?
← →
Вариант (2011-08-16 09:06) [57]Когда указатель преобразовали к числу и увеличили его на 1, как в коде Ega32, то указатель стал указывать на следующий байт в массиве, а не наследующий его элемент. Если бы в СИ я так же сделал с преобразованием указтеля к числу, то получил бы то же самое. Но
*(p+1)
увеличивает адрес указателя так, что указатель будет указывать на следующий элемент, то есть 1 неявно умножается на sizeof(тип элемента). Для указателя на char разницы нет, для указателя на другие типы разница есть. Для указателя на тип void операция запрещена или считается , что указатель на тип char - зависит от компилятора
← →
Вариант (2011-08-16 09:11) [58]
> Юрий Зотов © (16.08.11 08:58) [56]
Резюме
*(P+N) -> Inc(P,N)
Inc(P) <> Pinteger(Cardinal(P)+1)
← →
Ega23 © (2011-08-16 09:15) [59]
> увеличивает адрес указателя так, что указатель будет указывать
> на следующий элемент, то есть 1 неявно умножается на sizeof(тип
> элемента).
Для этого Inc есть
> Для указателя на char разницы нет
Это в этих ваших сях нет. А мы тут зимой потрахались, меняя PChar на PByte
P.S. Вообще я не в первый раз уже встречаю такое чёткое заблуждение, что "только PChar" можно использовать. Причём у таких людей, на которых никогда бы не подумал.
Может какое наследие Turbo Pascal, или там Delphi 3?
← →
Вариант (2011-08-16 09:24) [60]
> Ega23 © (16.08.11 09:15) [59]
Про Inc согласен, он и служит для адресной арифметики в дельфи, иCardinal(p) := Cardinal(p) + 1;
, где P указатель, скорее всего в дельфи будет ошибкой.
> Это в этих ваших сях нет. А мы тут зимой потрахались, меняя
> PChar на PByte
А мои не только Си:-) Кстати Pbyte соответствует более unsigned char *. Правда char в си шире char в паскале.
А разница есть и для си. Контроль за типами слабже -это да. Но результат можно получить другой и в программе на С, если путать типы.
← →
Anatoly Podgoretsky © (2011-08-16 09:34) [61]
> Вариант (16.08.11 09:11) [58]
Так и прибавляй не 1 а sizeof(element)
← →
Anatoly Podgoretsky © (2011-08-16 09:35) [62]> Вариант (16.08.2011 09:24:00) [60]
Char в СИ совсем не char
← →
Вариант (2011-08-16 09:38) [63]
> Anatoly Podgoretsky © (16.08.11 09:34) [61]
> Так и прибавляй не 1 а sizeof(element)
А зачем мне лишние действия, когда есть нужные процедуры?
> Char в СИ совсем не char
сhar в СИ не только Char LOL:-)
← →
Anatoly Podgoretsky © (2011-08-16 10:01) [64]> Вариант (16.08.2011 09:38:03) [63]
И это дурдом
← →
Юрий Зотов © (2011-08-16 10:10) [65]> Вариант
> 1 неявно умножается на sizeof(тип элемента).
То же самое делает Inc.
> Для указателя на тип void операция запрещена
А в Delphi - без проблем. Приводим тип - и можем делать что угодно Выходит, что в Delphi адресная арифметика даже богаче, чем в C.
> или считается , что указатель на тип char - зависит от компилятора
А вот это - серьезная засада. Один и тот же исходный код может вести себя по-разному.
> Про Inc согласен, он и служит для адресной арифметики в дельфи
Не только Inc. В Delphi с указателями можно проделывать любые целочисленные операции, хоть деление. И снова выходит, что в Delphi адресная арифметика даже богаче, чем в C.
> Cardinal(p) := Cardinal(p) + 1;, где P указатель, скорее всего
> в дельфи будет ошибкой.
Не будет.
← →
Вариант (2011-08-16 10:11) [66]
> Anatoly Podgoretsky © (16.08.11 10:01) [64]
Этой фразы не понял, к чему?
← →
Ega23 © (2011-08-16 10:13) [67]
> Cardinal(p) := Cardinal(p) + 1;, где P указатель, скорее
> всего в дельфи будет ошибкой.
Нет там ошибки:procedure TForm8.Button1Click(Sender: TObject);
var
i: Integer;
p: PInteger;
arr: array[0..1] of Integer;
begin
arr[0] := $44332211;
arr[1] := $88776655;
p := @arr[0];
for i := 1 to 4 do
begin
Cardinal(p) := Cardinal(p) + 1;
Memo1.Lines.Add(IntToHex(p^, 8));
end;
end;
Результат в Memo1:55443322
66554433
77665544
88776655
Всё как и задумывалось.
← →
Anatoly Podgoretsky © (2011-08-16 10:14) [68]
> Этой фразы не понял, к чему?
Дурдом это дурачкий дом, применять к char
← →
Вариант (2011-08-16 10:27) [69]
> Юрий Зотов © (16.08.11 10:10) [65]
Начнем с того, что разговор был не о Inc/
Покажите, где я говорил беднее:-) Inc и Dec хватает. Но я отвечал на вопрос
> Юрий Зотов © (16.08.11 08:58) [56]
>
> > Вариант (16.08.11 08:48) [54]
> > Это совсем не эквивалент *(p+1),
>
> А в чем различие?
>
Вроде разницу объяснил, или не очень понятно объяснил? Могу попробовать на примере, если необходимо?
А насчет богаче или беднее, мне честно говоря все равно, какой язык богаче или беднее, мне важно, какой удобней для той или иной цели. А все, что вы делаете в виде преобразования указателя к числу, можно сделать так же и в си, поверьте уж. А вот делить именно указатель нельзя ни там ни там;-) Я сейчас зачастую в некоторых задачах использую язык вообще без указателей и хватает
← →
Вариант (2011-08-16 10:29) [70]
> Anatoly Podgoretsky © (16.08.11 10:14) [68]
Извините, но я опять не понял, что вы хотели сказать
← →
Игорь Шевченко © (2011-08-16 10:32) [71]
> Я сейчас зачастую в некоторых задачах использую язык вообще
> без указателей и хватает
Например, русский :))
← →
Ega23 © (2011-08-16 10:35) [72]
> Например, русский :))
В русском без указателей плохо. Особенно - в метро в центре.
← →
Вариант (2011-08-16 10:39) [73]
> Ega23 © (16.08.11 10:13) [67]
Ошибка, пользоваться микроскопом для забивания гвоздей. И наоборот молотком для ловли блох. Нет в этом необходимости, писать кучу лишнего кода. Зотов вон си ругает, а в чем плюс дельфи, если писать так, как ты показал? У Си и дельфи разные спсобы адресной арифметики. У дельфи более безопасные. Зачем делать так, как в си? Что бы поиметь возможность проблем?
Причем си даже в этом случае получается предпочтительней.
← →
Вариант (2011-08-16 10:40) [74]
> Игорь Шевченко © (16.08.11 10:32) [71]
Вот и неправда, в русском указатели есть LOL
← →
Ega23 © (2011-08-16 10:50) [75]
> Зачем делать так, как в си? Что бы поиметь возможность проблем?
Я всего лишь показал возможность сделать и через Inc, и через приведение типов.
Как лично я делаю? В зависимости от задачи.
← →
Игорь Шевченко © (2011-08-16 11:20) [76]Ega23 © (16.08.11 10:13) [67]
А что делает этот код ?
← →
Ega23 © (2011-08-16 11:38) [77]
> А что делает этот код ?
Мемо заполняет цифрами.
← →
Inovet © (2011-08-16 11:42) [78]> [51] Германн © (16.08.11 01:02)
> Но в Си, если мне не изменяет мой склероз, разрешены простые
> арифметические операции над указателями. Которые не зависят
> от того, на что данный указатель указывает.
У указателя всегда есть тип, на который он указывает, кроме void*.
← →
Игорь Шевченко © (2011-08-16 11:43) [79]
> Мемо заполняет цифрами.
Я тебе совет дам по оптимизации, так проще:Memo1.Lines.Add("55443322"#13#10"66554433"#13#10"77665544"#13#10"88776655" );
всего одна строчка против 16
← →
Anatoly Podgoretsky © (2011-08-16 12:20) [80]> Игорь Шевченко (16.08.2011 10:32:11) [71]
Ну не надо, там есть явные указатели (направления)
← →
Anatoly Podgoretsky © (2011-08-16 12:23) [81]> Ega23 (16.08.2011 10:50:15) [75]
А я всегда + чтобы не попасть в просак, вон сегодня пример такого просака,
вопрос Left Side...
И как правило оба варианта приводит к одной и той же ассемблерной команде.
← →
Вариант (2011-08-16 13:02) [82]
> Anatoly Podgoretsky © (16.08.11 12:23) [81]
Хорошо, что нет еще DELPHI64.
← →
Ega23 © (2011-08-16 14:13) [83]
> Хорошо, что нет еще DELPHI64.
Ну уже практически есть
← →
Вариант (2011-08-16 14:21) [84]
> Ega23 © (16.08.11 14:13) [83]
Какие радости перевода типов данных это нам готовит? Есть информация?
← →
Омлет © (2011-08-16 15:08) [85]> Какие радости перевода типов данных это нам готовит?
Pointer станет 8-байтным.
← →
Вариант (2011-08-16 15:15) [86]
> Омлет © (16.08.11 15:08) [85]
Это значит адресную арифметику основанную на типах integer, cardinal и +/- надо переделывать. Inc и Dec работать будут. По крайней мере по preview компилятора разрядность Cardinal и Integer останется 4 байта.
← →
Anatoly Podgoretsky © (2011-08-16 15:16) [87]> Вариант (16.08.2011 15:15:26) [86]
Нам мешают дураки и дороги, им же только дураки.
← →
Вариант (2011-08-16 15:46) [88]
> Anatoly Podgoretsky © (16.08.11 15:16) [87]
Очень ценные и в тему у вас замечания [64],[68],[87], Анатолий. Но мне к сожалению не понятные, какое отношения они имеют к теме дискуссии?
← →
Омлет © (2011-08-16 16:05) [89]> Вариант (16.08.11 15:46) [88]
Мозг Анатолия давно перешел в новое качественное состояние, генерирующее многослойные, суперметасмысловные идиоматические конструкции )
← →
Anatoly Podgoretsky © (2011-08-16 16:34) [90]> Омлет (16.08.2011 16:05:29) [89]
Сам ты идиомат :-)
Страницы: 1 2 3 вся ветка
Текущий архив: 2011.12.04;
Скачать: CL | DM;
Память: 0.71 MB
Время: 0.01 c