Все остальные абсолютно правы.Вы не можете преобразовать массив символов в целое число, используя приведение.Это не работает таким образом.В C символы представлены целыми числами.Когда вы пишете:
char *s = "hello123";
Вы получаете массив с кучей символов в нем.Вы могли бы эквивалентно написать:
char *s = {'h', 'e', 'l', 'l', 'o', '1', '2', '3', '\0'};
Таким образом, когда вы вызываете printf("%d\n",*(int *)s);
, то, что вы делаете, это приведение адреса памяти вашего массива символов к указателю на целое число.Затем вы берете содержимое этого целого числа и печатаете его.Я почти уверен, что результат, который вы получите, будет зависеть от системы, которую вы используете, но это определенно не то, что вы хотите.
То, что вы, вероятно, хотите сделать, это:
printf("%d\n", atoi(&(s[5]));