Объясните смысл.
От: Аноним  
Дата: 04.02.04 16:51
Оценка:
Объясните, что значит эта запись:
{
  unsigned short *u;
  long vJ;
  unsigned short *uShift = u + vJ;
}

Спасибо.
Re: Объясните смысл.
От: LaptevVV Россия  
Дата: 04.02.04 16:55
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Объясните, что значит эта запись:

А>
А>{
А>  unsigned short *u;
А>  long vJ;
А>  unsigned short *uShift = u + vJ;
А>}
А>

А>Спасибо.
1. указатель на короткое целое
2. длинное целое
3. к указателю на короткое целое прибавляется. Получается новый указатель

Нет инициализации u, vJ. Отсюда — что получится в UShift — даже Бог не знает.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: Объясните смысл.
От: Аноним  
Дата: 04.02.04 17:02
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Нет инициализации u, vJ. Отсюда — что получится в UShift — даже Бог не знает.


Инициализация есть, я ее не показал.
Re[3]: Объясните смысл.
От: LaptevVV Россия  
Дата: 04.02.04 17:03
Оценка:
Здравствуйте, Аноним, Вы писали:

LVV>>Нет инициализации u, vJ. Отсюда — что получится в UShift — даже Бог не знает.


А>Инициализация есть, я ее не показал.

Ну, тогда это просто вычисление адреса, наверное некоего элемента массива. Или чего-нить аналогичного.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[4]: Объясните смысл.
От: Аноним  
Дата: 04.02.04 17:07
Оценка:
Здравствуйте, LaptevVV, Вы писали:

А можете написать как это на Delphi будет?
Re[5]: Объясните смысл.
От: LaptevVV Россия  
Дата: 04.02.04 17:13
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, LaptevVV, Вы писали:


А>А можете написать как это на Delphi будет?

А на дельфи разве можно указатели складывать? ИМХО (давно паскалем не занимался) — нет.
Если нельзя, то придется городить огород с преобразованием типов вроде pointer->integer, а потом обратно.
Текста поболе приведи, может решение и найдется.
Или сходи в форум дельфинов — они поправят.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[6]: Объясните смысл.
От: Аноним  
Дата: 04.02.04 17:16
Оценка:
Здравствуйте, LaptevVV, Вы писали:


LVV>Или сходи в форум дельфинов — они поправят.


Там уже был, они молчат.
Re[7]: Объясните смысл.
От: LaptevVV Россия  
Дата: 04.02.04 17:21
Оценка:
Здравствуйте, Аноним, Вы писали:

Тогда текст давай, может эту проблему на С++ переписать можно так, что потом на дельфях легко написать.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[7]: Объясните смысл.
От: Аноним  
Дата: 04.02.04 19:17
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, LaptevVV, Вы писали:



LVV>>Или сходи в форум дельфинов — они поправят.


А>Там уже был, они молчат.



var
  u, uShift: ^Word;
  vJ: Longint;
begin
  u := ...;
  vJ := ...;

  uShift := u;
  Inc(uShift, vJ);  

  // или Integer(uShift) := Integer(u) + vJ*SizeOf(Word);
end;
Re[5]: Объясните смысл.
От: Аноним  
Дата: 04.02.04 20:20
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, LaptevVV, Вы писали:


А>А можете написать как это на Delphi будет?


Вот понимаю, если бы с делфи на цпп переносить. Обратно-то зачем?
Re: Объясните смысл.
От: konst  
Дата: 05.02.04 08:13
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Объясните, что значит эта запись:

А>
А>{
А>  unsigned short *u;
А>  long vJ;
А>  unsigned short *uShift = u + vJ;
А>}
А>

А>Спасибо.

Щас дельфей нет под руками и давно их не использовал, боюсь страшно наврать, но попробую:

type
SmallIntPtr = ^SmallInt;
function AddOffset(var u: array of SmallInt; vJ: Cardinal): SmallIntPtr;
begin
AddOffset := @u[vJ];
end;

соответственно в тексте

u, uShift: SmallIntPtr;
vJ: Cardinal;
...
u := ...
vJ := ...
uShift := AddOffset(u, vJ);
Re[8]: Объясните смысл.
От: Аноним  
Дата: 05.02.04 08:44
Оценка: :)
Здравствуйте, Аноним, Вы писали:

LVV>>>Или сходи в форум дельфинов — они поправят.

А>>Там уже был, они молчат.

Они уже давно тут

А>
А>var
А>  u, uShift: ^Word;
А>  vJ: Longint;
А>begin
А>  u := ...;
А>  vJ := ...;

А>  uShift := u;
А>  Inc(uShift, vJ);  

А>  // или Integer(uShift) := Integer(u) + vJ*SizeOf(Word);
А>end;
А>


Все правильно, только второй варинт по-другому:
  uShift := Pointer(Cardinal(u) + vJ*SizeOf(Word));
Re[9]: Объясните смысл.
От: Аноним  
Дата: 05.02.04 09:22
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Все правильно, только второй варинт по-другому:

А>
А>  uShift := Pointer(Cardinal(u) + vJ*SizeOf(Word));
А>


Это уж кому как больше нравится.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.