struct — это record, см. help. Указатели — надо смотреть по смыслу задачи. Здесь скорее всего имелись в виду массивы; можно перевести один в один, можно сделать именно массивы — зависит от того, что с этим дальше нужно делать.
Re[2]: Как это перевести на Делфи из С++
От:
Аноним
Дата:
18.04.05 04:48
Оценка:
Здравствуйте, Softwarer, Вы писали:
S>Здравствуйте, Аноним, Вы писали:
S>struct — это record, см. help. Указатели — надо смотреть по смыслу задачи. Здесь скорее всего имелись в виду массивы; можно перевести один в один, можно сделать именно массивы — зависит от того, что с этим дальше нужно делать.
это понятно мне не понятен этот кусок .
typedef struct SPrim
{
int l;
float* l1;
float** l2;
union <---- В особенности это !
{
SLp* params;
struct SPrim* prim; <--- Это указатель на обьект таковоже типа ?
} p;
} SPrim;
это случаем не алтернатива
my_struct = record
case integer of
0:params:SLp;
1: prim:my_struct;
end;
А>что то вроде не то ,
Все то. Не надо брезговать чтением хелпа. А>А вот кусочек кода на С++ А>там используют это , так А> тоесть именно как указатель на массивы .
Да, потому что в С/С++ указатели и массивы — близнецы-братья.
А вот у тебя что-то не сходится.
1. SPrim объявлен как структура. А потом почему-то встречается операция разыменования ссылки: s->l1.
2. SPrim.l1 объявлен как указатель на float. А ты почему-то читаешь его в переменную типа int. Это как минимум warning.
Так что чего-то ты темнишь.
... << RSDN@Home 1.1.4 beta 5 rev. 395>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[6]: Как это перевести на Делфи из С++
От:
Аноним
Дата:
27.04.05 04:15
Оценка:
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, <Аноним>, Вы писали:
А>>что то вроде не то , S>Все то. Не надо брезговать чтением хелпа. А>>А вот кусочек кода на С++ А>>там используют это , так А>> тоесть именно как указатель на массивы . S>Да, потому что в С/С++ указатели и массивы — близнецы-братья.
не знал :) S>А вот у тебя что-то не сходится. S>1. SPrim объявлен как структура. А потом почему-то встречается операция разыменования ссылки: s->l1. S>2. SPrim.l1 объявлен как указатель на float. А ты почему-то читаешь его в переменную типа int. Это как минимум warning. S>Так что чего-то ты темнишь.
Да точно темню :)
SPrim * s; // ох уж эта моя не внимательность :)
int * x; // :)
...
xx = s->l1[i];
... s->l2 = (float**)x+2;
Здравствуйте, <Аноним>, Вы писали:
>Да точно темню А>SPrim * s; // ох уж эта моя не внимательность
А что такое xx? Ты вроде только x объявлял.
Кроме того, выражение
s->l2 = (float**)x+2;
меня очень настораживает. То есть мы тут приводим указатель на инт к указателю на указатель на флоат, прибавляем к нему 2 (т.е. сдвигаем на два размера указателя), а потом кладем в l2...
Я добрый — тебе подскажу. В винде есть замечательный способ избежать ошибок при переписывании. Выделяешь кусок текста мышкой, нажмаешь Ctrl+C. Потом встаешь в то место, куда надо вставить код, и нажимаешь Ctrl+V. Осваивай. А то мы никогда не сможем перевести твой глухой телефон на Delphi. Скопируй сюда кусок настоящего кода, а не свои туманные воспоминания о нем.
... << RSDN@Home 1.1.4 beta 5 rev. 395>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, <Аноним>, Вы писали:
А>там используют это , так А> тоесть именно как указатель на массивы .
Если так, то можно переобъявить следующим образом:
type
TFloatArray = array[0..10000] of float;
PFloatArray = ^TFloatArray;
PPFloatArray = ^PFloatArray;
PSPrim = ^SPrim;
SPrim = record
L1: PFloatArray;
L2: PPFloatArray;
case integer of
0:params: ^SLp;
1:prim: PSPrim;
end;
end;
... << RSDN@Home 1.1.4 beta 5 rev. 395>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[8]: Как это перевести на Делфи из С++
От:
Аноним
Дата:
27.04.05 05:00
Оценка:
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, <Аноним>, Вы писали:
>>Да точно темню :) А>>SPrim * s; // ох уж эта моя не внимательность :) S>А что такое xx? Ты вроде только x объявлял.
float xx S>Кроме того, выражение S>
s->>l2 = (float**)x+2;
S>
S>меня очень настораживает. То есть мы тут приводим указатель на инт к указателю на указатель на флоат, прибавляем к нему 2 (т.е. сдвигаем на два размера указателя), а потом кладем в l2...
S>Я добрый — тебе подскажу. В винде есть замечательный способ избежать ошибок при переписывании. Выделяешь кусок текста мышкой, нажмаешь Ctrl+C. Потом встаешь в то место, куда надо вставить код, и нажимаешь Ctrl+V. Осваивай. А то мы никогда не сможем перевести твой глухой телефон на Delphi. Скопируй сюда кусок настоящего кода, а не свои туманные воспоминания о нем.
Угу есть такое :)
Чуть попозже сделаемс .
Re[6]: Как это перевести на Делфи из С++
От:
Аноним
Дата:
27.04.05 05:45
Оценка:
typedef struct SLp
{
int* pl;
float* pfl;
}SLp;
typedef struct SPrim
{
int l;
float* l1;
float** l2;
union
{
SLp* params; // это тоже как массив struct SPrim* prim; // это тоже как массив
} p;
} SPrim;
Вот как работают
float** l2; //а это можно пропустить мне с ним работать не нужно будет .