Because you're giving it a string. A string in C is a sequence of chars, basically a char array. When you pass an array to a function, in reality you are passing a pointer to the first element of the array.
When you use a string literal in C, its address is substitued into its place. So when you write something like the following code, the internal behavior is quite different than you might expect:
The string "Hello, world!\n" is probably saved in the .data segment of your program or some other area where it resides outside of the .code section. In its place, the address of the start of where the entire string is stored in memory is given to the printf() function. This allow printf() to receive the entire sequence of chars by a pointer.