#include #include struct my_st { char name[10]; int num; }; void print_struct (struct my_st data) { printf("{ name = %s; num = %d }\n", data.name, data.num); } void cbv_mutate(struct my_st data) { data.name[0] = 'b'; data.num = -1; } void cbr_mutate(struct my_st *data) { data->name[0] = 'b'; data->num = -1; } int main(int argc, char **argv) { struct my_st s, t; struct { char *name; int num; } u; strcpy(s.name, "foo"); s.num = 4; t = s; /* u = s; this produces an incompatible type error at compile time */ /* as does an attempt to pass u to print_struct(). So */ /* char[10] and (char *) are not the same! */ u.name = s.name; u.num = s.num; print_struct(s); cbv_mutate(s); print_struct(s); cbr_mutate(&s); print_struct(s); print_struct(t); /* print_struct(u); compilation error. see above */ printf("{ name = %s; num = %d }\n", u.name, u.num); return 0; }