Hola amigo segun yo y mis pocos conocimientos
Cuando llega a esta instruccion;
printf("%d-%d-%d\n", dia, mes, anho);
lo que le estas pidiendo que haga es eso que imprim
a la direccion en memoria y soy un aprendiz igual que tu dejame aver si te puedo ayudarte ya que pratico C++ y no se casi nada de C.
PD:Re cuerda que la programacion es una serie de instrucciones que se ejecutan secuencial mente no lo olvides cuando tengas o te aparezca un error solo fijate en que parte lo esta haciendo y listo. dejame sequir viendo Saludos.
Hola amigo despues de estar viendo y tratando cosas me di cuenta de algo.
1. Texplico cuando el programa se ejecuta lo primero que hace es empezar por las variables no ok.
2. lo siquiente que hace es llamar a la funcion fecha que tienes tres argunmentos o parametros como quieras llamerles y tu le pasas dia mes y a~no ok.
3 Despues esos argumetos se evaluan en la funcion y te devuelven la fecha como lo podes notar en la primera imprecion.
4 luego llega al printf es es donde tu te preguntas por que te imprime la direccion no? es por que es el ultimo valor que tomaron las variables, no me entiendes ok si tu vienes y modificas el codigo.
en esta linea y pones
int dia=2, mes=9, anho=8;
veras una salida como esta
es porque en la direccion que se almacen no hay nada pero si inicializas las variables veras los valores con que la inicializaste ya no entra a la direccion de memoria sino al valor de la variable.
Y tambien ese es el objetivo de usar funciones para evitar redundancia de codigo.
tu puedes llamar esa funcion donde la nesecites. Claro dentro del ambito de donde se declare.
espero haber ayudado saludos y cuidate. tambien aprendi saludos.
PD: Recuerda.
un entero tiene (int). 4 Bytes = 4x8 = 32 bits
Con 32 bits se pueden representar 232=4294967296 valores.