For the other data types I have learned so far, the arguments for scanf and printf were different.
but with strings, you use the array name for the arguments in both i/o functions:
printf("enter an integer> ");
printf("you entered %d", i);
I understand that you don't need an address-of operator in scanf to store data in an array, because an array name is the address of the first element in the array, and so is a pointer type.
printf("enter a message> ");
printf("you entered %s", msg);
Then again, I also understand that using *msg in printf would dereference the first character in msg, which is a character, not a string. So I "intuitively" get that msg is the right argument for printf.
Still I can't get my head around why you can use the same arguments for scanf and printf.