Как это перевести на Делфи из С++
От: Аноним  
Дата: 17.04.05 14:11
Оценка:
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;
Re: Как это перевести на Делфи из С++
От: Softwarer http://softwarer.ru
Дата: 17.04.05 14:17
Оценка:
Здравствуйте, Аноним, Вы писали:

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;
Re[3]: Как это перевести на Делфи из С++
От: Softwarer http://softwarer.ru
Дата: 18.04.05 04:53
Оценка:
Здравствуйте, Аноним, Вы писали:

А>это случаем не алтернатива


Альтернатива. И я уверен, что в хелпе об этом написано.
Re[3]: Как это перевести на Делфи из С++
От: Sinclair Россия https://github.com/evilguest/
Дата: 18.04.05 05:04
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>это случаем не алтернатива

А>
А>my_struct = record
А>  case integer of 
А>    0:params:SLp;
А>    1: prim:my_struct;
А>end;
А>

Нет. Это альтернатива

type
PFloat = ^Float;
PPFloat = ^PFLoat;
PSPrim = ^SPrim;
SPrim = record
  l1: PFloat;
    l2: PPFloat;
  case integer of 
    0:params: ^SLp;
    1:prim: PSPrim;
    end;
end;
... << RSDN@Home 1.1.4 beta 5 rev. 395>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: Как это перевести на Делфи из С++
От: Аноним  
Дата: 26.04.05 14:54
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, <Аноним>, Вы писали:


А>>это случаем не алтернатива

А>>
А>>my_struct = record
А>>  case integer of 
А>>    0:params:SLp;
А>>    1: prim:my_struct;
А>>end;
А>>

S>Нет. Это альтернатива

S>
S>type
S>PFloat = ^Float;
S>PPFloat = ^PFLoat;
S>PSPrim = ^SPrim;
S>SPrim = record
S>  l1: PFloat;
S>    l2: PPFloat;
S>  case integer of 
S>    0:params: ^SLp;
S>    1:prim: PSPrim;
S>    end;
S>end;
S>



что то вроде не то ,
А вот кусочек кода на С++

там используют это , так
тоесть именно как указатель на массивы .
{
SPrim s;
int x=0;
for (int i = 0;i<5;i++)
{
...
x = s->l1[i];
...
}
...
};
Re[5]: Как это перевести на Делфи из С++
От: Sinclair Россия https://github.com/evilguest/
Дата: 27.04.05 03:03
Оценка:
Здравствуйте, <Аноним>, Вы писали:


А>что то вроде не то ,

Все то. Не надо брезговать чтением хелпа.
А>А вот кусочек кода на С++
А>там используют это , так
А> тоесть именно как указатель на массивы .
Да, потому что в С/С++ указатели и массивы — близнецы-братья.
А вот у тебя что-то не сходится.
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;
Re[7]: Как это перевести на Делфи из С++
От: Sinclair Россия https://github.com/evilguest/
Дата: 27.04.05 04:46
Оценка: :)
Здравствуйте, <Аноним>, Вы писали:

>Да точно темню

А>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>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[5]: Как это перевести на Делфи из С++
От: Sinclair Россия https://github.com/evilguest/
Дата: 27.04.05 04:46
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>там используют это , так

А> тоесть именно как указатель на массивы .
Если так, то можно переобъявить следующим образом:
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; //а это можно пропустить мне с ним работать не нужно будет .
  ...
  SPrim * s;
  ...
  for (int i = 0;i< s->l;i++)
   {
       fprintf(file, "%d ", s->p.prim[i].l); 
   };
  fprintf(file, "\n");
  SPrim * s_0 = &(s->p.prim[i]);
  for( int j = 0; j < s_0->l; j++ )
   {
     fprintf(file, "%d ", s_0->p.prim[j].l);
   };
   ...


везде числа числа числа :)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.