#include struct sa { int a; int b; }; int main(){ struct sa our_sa = {10, 20}; printf("Contents: a = %d, b = %d\n", our_sa.a, our_sa.b); int *a_pointer = (int*)&our_sa; a_pointer[1] = 500; printf("Contents: a = %d, b = %d\n", our_sa.a, our_sa.b); if(our_sa.b == a_pointer[1]) // This is ALWAYS true because they're the same thing! printf("Logic works today!\n"); (a_pointer + 1)[0] = 1000; printf("Contents: a = %d, b = %d\n", our_sa.a, our_sa.b); *(a_pointer + 1) = 1024; printf("Contents: a = %d, b = %d\n", our_sa.a, our_sa.b); int **twostar = &a_pointer; int ***threestar = &twostar; int ****fourstar = &threestar; fourstar[0][0][0][1] = 42; printf("Contents: a = %d, b = %d\n", our_sa.a, our_sa.b); ****fourstar = 37; // changes a *(***fourstar + 1) = 89; // changes b printf("Contents: a = %d, b = %d\n", our_sa.a, our_sa.b); return 0; }