Приведение структуры к структуре
Подскажите пожалуйста, где я ошибаюсь ?
#include <iostream>
struct My_struct
{
int my_int1;
};
struct my_Struct_add
{
My_struct my_structura;
int added;
};
void my_func_(My_struct* My_struct_for_func)
{
std::cout << My_struct_for_func->my_int1 << std::endl; //Вывожу значение поля my_int1 структуры My_struct, все выводится корректно - 555.
std::cout << ((my_Struct_add*)&My_struct_for_func)->my_structura.my_int1 << std::endl; //Но как только я привожу структуру My_struct к указателю на структуру my_Struct_add, то в значение поля my_int1 - выводится мусор.
}
int main()
{
my_Struct_add my_struct_ex = { 0 };
my_struct_ex.my_structura.my_int1 = 555;
my_func_((My_struct*)&my_struct_ex); //Функция принимает указатель на структуру My_struct, но я привожу структуру my_Struct_add к указателю на структуру структуру My_struct.
}
Не могу понять, почему в функции my_func_ - после того, как я привел структур My_struct к указателю на структуру my_Struct_add - почему вывод значений полей это структуры - выводится мусор, а не установленное значение.
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Вообще-то все выводится, как просите.
Исправьте
((my_Struct_add*)&My_struct_for_func)
на
((my_Struct_add*)My_struct_for_func)
и все будет, как вы хотите. Просто вы пытаетесь вывести поле (якобы) структуры, лежащей там, где на самом деле лежит переданный указатель.
Только вот вообще такие приведения типов - вещь опасная. Гуру от стандарта расскажут, UB это или нет. На практике же все должно работать.