![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Указатель на Array [D7, XP]
rammic © (2011-08-14 15:50:00)Со смирением прошу ответить. Как в Delphi указатель на Array of Real
переводится на заданный элемент массива. Если в С++ это получается
если написать р[i] то в Delphi 1й элемент он показывает а любой другой
не хочет.
Ega23 (2011-08-15 13:53:00) [61]
> Я так и думал сделать, но надеялся что мне посоветуют что-то интереснее.
Убей себя, спаси мир.
Впрочем нет, не убивай. Пойди работать. Моя зарплата вырастет, если таких как ты будет много.
rammic (2011-08-15 13:47:00) [62]Насколько я понял, возможно неверно, Юрий Зотов предлагает сделать
копию нужного массива и работать с ней. Конечно. это просто. Я так и
думал сделать, но надеялся что мне посоветуют что-то интереснее.
RWolf (2011-08-15 13:44:00) [63]зачем копировать массивы?
чем объявление двумерного константного массива хуже объявления двух одномерных?
зачем вообще думать в сторону адресной арифметики? компилятор не сможет проверить её корректность, в отличие от индексации массивов.
sniknik (2011-08-15 13:29:00) [64]> мне казалось, что все будет проще.
ЧТО СЛОЖНОГО в [2]?????????????
sniknik (2011-08-15 13:28:00) [65]> слабое место Delphi.
это слабое место слабых умов...
при нескольких вариантах игнорировать нормальные, выбрать самый извращенный, и после злорадствовать, "а, вот! не может он так..."
------------------------
Купили суровые русские мужики японскую бензопилу, начали ее испытывать, в пилу щепку
- Вжик! - сказала пила и распилила щепку.
- А-а, б**! - сказали суровые русские мужики и засунули в пилу доску.
- Вжжик! - сказала пила и распилила доску.
- У-у, б**! - сказали суровые русские мужики и засунули в пилу бревно.
- Вжжжжик! - сказала пила и распилила бревно.
- У-у, б**!!! - сказали суровые русские мужики и засунули в пилу рельс.
- Хррр-дзинь - сказала пила и сломалась.
- Ах-ха, б**... - сказали суровые русские мужики и пошли валить лес топорами.
rammic (2011-08-15 13:25:00) [66]Прошу не скандалить, мне казалось, что все будет проще.
Dennis I. Komarov (2011-08-15 13:08:00) [67]
> Бред.
С пометкой "опасный"
Dennis I. Komarov (2011-08-15 13:08:00) [68]
> Похоже, сам того не желая, по своей малограмотности затронул
> слабое
> место Delphi.
Похоже на "X, Y, Z"
RWolf (2011-08-15 13:07:00) [69]
> [21]
Бред.
rammic (2011-08-15 12:52:00) [70]Похоже, сам того не желая, по своей малограмотности затронул слабое
место Delphi. Выходит что нужно вместо 2-х массивов иметь дело с тремя,
причем третий - искусственный - копия одного из нужных, или вместо 2-х простых массивов делать один многомерный, или писать много type -ов.
sniknik (2011-08-15 09:38:00) [71]> Пара костылей
ага, раз уж привык "на костылях" то ходи на них всю жизнь, не вздумай переучиваться, даже если "выздоровел"...
и в итоге сгенеренный asm код будет ничем не лучше, а скорее хуже чем из [2]. но это даже неплохо... даст повод поругать дельфи в стиле "ну и гадость эта ваша заливная рыба".
Ega23 (2011-08-15 09:32:00) [72]
> Ограничена символьными указателями
Есть Inc и Dec. Если чё.
icWasya (2011-08-15 09:30:00) [73]Пара костылей
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;
Anatoly Podgoretsky (2011-08-15 09:09:00) [74]> 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.
А общее только операция разименования.
Ega23 (2011-08-15 08:52:00) [75]
> И арифметику указателей не очень любит
С чего это???
Германн (2011-08-15 01:32:00) [76]
> rammic © (14.08.11 15:50)
>
> Со смирением прошу ответить.
А Паскаль ака Дельфи "строгий язык" в отличие от Си. И арифметику указателей не очень любит, хотя и приходится иногда.
Плохиш (2011-08-15 00:23:00) [77]
> rammic © (15.08.11 00:00) [11]
Зачем спрашиваешь, если ответы тебя не интересуют?
Дмитрий Белькевич (2011-08-15 00:16:00) [78]p у тебя указатель на extended, а нужно сделать указатель на массив extended'ов. А вообще - указатели тебе вообще не нужны, думается.
sniknik (2011-08-15 00:12:00) [79]> [Error] Unit1.pas(36): Array type required
указатель это ни разу не массив... не нужно смешивать синтаксисы.
> делаю какую- то глупую ошибку.
не глупую, идиотскую... пытаешься писать на С в дельфи.
в 2 хорошие примеры, чем не устраивает?
rammic (2011-08-15 00:00:00) [80]Пишу:
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
Понимаю, что делаю какую- то глупую ошибку.