scanf modifica el valor de las variables. Para poder obrar esa magia necesita recibir punteros.
En el caso de un string no hay problema puesto que el tipo es, por definición, un puntero:
Pero para el resto de tipos nativos la cosa cambia porque no son punteros. En este caso tenemos que pasar una referencia a la variable:
Un saludo.