In this case, you're lucky enough to get the decimal representation of the address in memory where "hello world" is stored.
> Just out of curiosity what happens if the place holder and the argument is not compatible?
Generally, all bets are off and you're on your own as to what the program may decide to do (or not do).
Pay attention to the warnings.
Code:
$ cat main.c
#include <stdio.h>
int main()
{
printf("some text %d", "hello world");
return 0;
}
$ gcc -Wall main.c
main.c: In function ‘main’:
main.c:5:10: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘char *’ [-Wformat=]
printf("some text %d", "hello world");
^