Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Указатель на Array [D7, XP]


Страницы:   1 2 3 4 5

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

Понимаю, что делаю какую- то глупую ошибку.


Страницы:   1 2 3 4 5

Наверх

Титульная страница Поиск, карта сайта Написать письмо