Здравствуйте, DioNNis, Вы писали:
DNN>Нужно установить нетипизированный указатель PPTR на запись R. Вот в делфях это делается с помощью объявления типа pointer, а как в С/C++?
void*
DNN>C#?
Что-нибудь вроде System.IntPtr, только непонятно зачем
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Здравствуйте, DioNNis, Вы писали:
DNN>Нужно установить нетипизированный указатель PPTR на запись R. Вот в делфях это делается с помощью объявления типа pointer, а как в С/C++/C#?
Но при этом почему то место не освобождается под PPTR, он как был нетипизированным указателем, так и остался..., т.е. присвоить значение полям нет никакой возможности... помогите пожалуйста...
DNN>Но при этом почему то место не освобождается под PPTR, он как был нетипизированным указателем, так и остался..., т.е. присвоить значение полям нет никакой возможности... помогите пожалуйста...
А что, разве в дельфях можно было присваивать поля через pointer?
Ты бы лучше написал что ты хочешь сделать.
Чем не устраивает:
R *pR = new R;
.....
pR->a = XXX;
.....
delete pR;
Здравствуйте, Аноним, Вы писали:
А>А что, разве в дельфях можно было присваивать поля через pointer? А>Ты бы лучше написал что ты хочешь сделать. А>Чем не устраивает: А>
Тут используется типизированный указатель (R *pR = new R)
А вообще это у меня в лабе задание такое. Оно конечно для делфистов, а я просто делаю на С++, вот у меня и с нетипизированными указателями такая проблема...
12. Написать программу, устанавливающую нетипизированный указатель PPTR на запись R типа
Type
R = record
a, b:real
end;
Для выделения и ликвидации PPTR из памяти использовать функции GETMEM и FREEMEM.
Задать значение полей записи и вывести их на экран через разыменованный указа¬тель PPTR.
DNN>12. Написать программу, устанавливающую нетипизированный указатель PPTR на запись R типа
DNN>Type
DNN> R = record
DNN> a, b:real
DNN> end;
DNN>Для выделения и ликвидации PPTR из памяти использовать функции GETMEM и FREEMEM.
DNN>Задать значение полей записи и вывести их на экран через разыменованный указа¬тель PPTR.
DNN>left of '->a' must point to class/struct/union/generic type
Пишет компилятор, и совершенно правильно. Для того, чтобы не писал, нужно каждый раз при обращении к члену структуры R приводить PPTR к указателю на R.
((R*)PPTR)->a = 1;
У меня может быть и пробелы в памяти, но что-то мне кажется, что типизированный указатель в Pascal это не совсем то же, что и указатель на структуру (класс) в C++. И задание лабы для C смысла не имеет, ибо разименовав PPTR получим void, а его потом все равно приводить к R. Или можно добавлять к PPTR sizeof() предшествующих членов структуры, чтобы обратиться к какому-то из них. Но при этом нужно учитывать выравнивание, задаваемое опциями компилятора.
Что-то типа (без проверки выравнивания)