#include int main() { // Part 1: Numeric type casts long long int lli = 987654321987654321LL; long double ld = 3.1e-200; float f1 = 1.6; float f2 = 1.4; printf("lli is %lli\n",lli); printf("(int)lli is %d (precision lost)\n", (int)lli); printf("(float)lli is %f (precision lost)\n", (float)lli); printf("ld is %Lg\n",ld); printf("(float)ld is %g (precision lost)\n",(float)ld); printf("f1 is %f\n",f1); printf("(int)f1 is %d (truncation)\n",(int)f1); printf("f2 is %f\n",f2); printf("(int)f2 is %d (truncation)\n",(int)f2); printf("-------------------\n\n"); // Part 2: Pointer type casts printf("sizeof long long int is %d\n",sizeof(long long int)); printf("sizeof float is %d\n",sizeof(float)); printf("sizeof long double is %d\n",sizeof(long double)); printf("sizeof double is %d\n",sizeof(double)); printf("sizeof int is %d\n",sizeof(int)); printf("sizeof void is %d\n\n",sizeof(void)); long double *pld = &ld; printf("pld is %p\n",pld); printf("pld+1 is %p\n",pld+1); printf("(double*)pld is %p\n",(double*)pld); printf("(double*)pld+1 is %p\n",(double*)pld + 1); printf("(int*)pld+1 is %p\n",(int*)pld + 1); printf("(void*)pld+1 is %p\n",(void*)pld + 1); printf("-------------------\n\n"); // Part 3: Struct type casts typedef struct _Foo { int i; } Foo; typedef struct _Bar { int j; } Bar; Foo foo = { 5 }; printf("foo.i is %d\n",foo.i); // COMPILE TIME ERROR //printf("((Bar)foo).i is %d\n",((Bar)foo).i); return 0; }