#include #include struct PlayStruct { int int_value; double double_value; char a_string[64]; }; void print_struct(struct PlayStruct ps, struct PlayStruct* pps) { printf("Values of struct ps: %d, %lf, %s\n", ps.int_value, ps.double_value, ps.a_string); printf("Values of struct pps %d, %lf, %s\n", pps->int_value, pps->double_value, pps->a_string); } void change_struct(struct PlayStruct ps, struct PlayStruct* pps) { ps.int_value = 2; ps.double_value = 3.0; pps->int_value = 4; pps->double_value = 5.0; } void print_string(char string_to_print[]) { printf("%s\n", string_to_print); } void change_string(char string1[], char *p_string) { string1[2] = '\0'; p_string[1] = '\0'; } int main(int argc, char* argv[]) { struct PlayStruct play_struct = {1, 2.0, "Hello!"}; print_struct(play_struct, &play_struct); change_struct(play_struct, &play_struct); //only the struct from the pointer will be changed, the other one doesnt, as it is a local var print_struct(play_struct, &play_struct); print_string(play_struct.a_string); char another_string[16] = "World!"; change_string(play_struct.a_string, another_string); print_string(play_struct.a_string); print_string(another_string); //both will be changed, because they are both pointers return 0; }