@adent

Объясните что делает этот код и как его решить?

Не могу понять логику программы и задание в целом.

Дан следующий тип данных:

struct T 
{ 
   struct _T_ 
   { 
      int* a; 
   }* p1;

   float* a; 
   int* b; 

   struct _T 
   {
      int a; 
      int b; 
      double c; 
    }* p2; 

    int c; 
};


Само задание:

Задайте каждому полю переменной value типа Т произвольное начальное значение в строке инициализации переменной


Объясните, пожалуйста, как это сделать?
  • Вопрос задан
  • 107 просмотров
Решения вопроса 1
@kamenyuga
Чтобы инициализирвать переменную такого типа, надо передать ей набор значений для всех ее полей. Для инициализации указателей, нужно выделить память (в куче с помощью new). Собственно вся инициализация происходит внутри функции T create_t_1(), укороченный альтернативный вариант в T create_t_2().

#include <iostream>


struct T {

	struct _T_ {
		int* a;
	}* p1;

	float* a;
	int* b;

	struct _T {
		int a;
		int b;
		double c;
	}* p2;

	int c;
};


T create_t_1() {

	int* _t_a = new int {76};
	T::_T_* p1 = new T::_T_ {_t_a};

	float* a = new float {85.012};
	int* b = new int {100};

	T::_T* p2 = new T::_T {122, 152, 203.013};
	int c = 250;

	T ans {p1, a, b, p2, c};

	return ans;
}


T create_t_2() {

	T ans {
		new T::_T_ {new int {76}},
		new float {85.012},
		new int {100},
		new T::_T {122, 152, 203.013},
		250};

	return ans;
}


void print_t(const T& t) {

	std::cout << "&.p1.a = " << t.p1->a << "\n"
			  << "&.a = " << t.a << "\n"
			  << "&.b = " << t.b << "\n"
			  << std::endl;

	std::cout << ".p1.a = " << *t.p1->a << "\n"
			  << ".a = " << *t.a << "\n"
			  << ".b = " << *t.b << "\n"
			  << ".p2.a = " << t.p2->a << "\n"
			  << ".p2.b = " << t.p2->b << "\n"
			  << ".p2.c = " << t.p2->c << "\n"
			  << ".c = " << t.c << "\n"
			  << std::endl;
}


int main() {

	T value_1 = create_t_1();
	print_t(value_1);

	T value_2 = create_t_1();
	print_t(value_2);

	return 0;
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы