کد بالا درست کار نمی کنه چون شما داری قواعد Strict aliasing توی C/c++ رو رعایت نمی کنی و کد بالا undefined هستش.
این قاعده بصورت خلاصه اینه که وفتی که 2 تا پوینتر از نوع متفاوت داری زمانی که از * استفاده میشه مقدارشون هیچ وقت به یک محل از حافظه اشاره نمی کنه
بّرای همین این کد کار نمیکنه و کامپایل نمیشه :
int* foo;
double* bar;
foo=bar;
وقتی که شما به اون شکل تبدیل می کنی این قاعده رو نقض می کنی برای همین برنامتون نتیجش مشخص نیست .