Объясните что делает этот код
Не могу понять логику программы и задание в целом.
Дан следующий тип данных:
struct T
{
struct _T_
{
int* a;
}* p1;
float* a;
int* b;
struct _T
{
int a;
int b;
double c;
}* p2;
int c;
};
Само задание:
Задайте каждому полю переменной
valueтипаТпроизвольное начальное значение в строке инициализации переменной
Объясните, пожалуйста, как это сделать?
Ответы (1 шт):
Этот код объявляет пользовательский тип данных T, в котором содержатся указатели на ещё 2 пользовательских типа данных _T_ и _T.
Задание странное, с точки зрения использования имен вложенных структур - как будто специально старались запутать. Но на самом деле ничего страшного нет. Его можно только для наглядности переписать так:
struct _T_
{
int* a;
};
struct _T
{
int a;
int b;
double c;
};
struct T
{
_T_ *p1;
float* a;
int* b;
_T *p2;
int c;
};
Тогда задание значений будет так:
int main()
{
T value{nullptr, nullptr, nullptr, nullptr, 3};
}
Что равнозначно
int main()
{
T value;
value.p1 = nullptr;
value.a = nullptr;
value.b = nullptr;
value.p2 = nullptr;
value.c = 3;
}
Тут по-умолчанию указателям присваиваются nullptr. Если нужны конкретные значения, то нужно сначала создать конкретные объекты, а потом присвоить указателям их адреса:
int main()
{
T::_T_ obj1;
T::_T obj2;
int var1 = 1;
float var2 = 2.0;
T value;
value.p1 = &obj1;
value.a = &var2;
value.b = &var1;
value.p2 = &obj2;
value.c = 3;
}
Либо через динамическое выделение памяти
int main()
{
T value;
value.p1 = new(T::_T_);
value.a = new(float);
...
}
Главное не забудьте всё, что выделяли через new удалить через delete.