Приведение структуры к структуре

Подскажите пожалуйста, где я ошибаюсь ?

#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 это или нет. На практике же все должно работать.

→ Ссылка