elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Doble declaración?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Doble declaración?  (Leído 2,201 veces)
Mr.Captcha

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Doble declaración?
« en: 5 Julio 2013, 10:09 am »

Hola, hice este pequeño programa, todo corre perfecto, solo que no entiendo bien las partes que señalo a continuación.

Código
  1. #include <stdio.h>
  2. #include <conio.h>
  3.  
  4. int main()
  5. {
  6. int num,x,result;            /* Aqui estoy indicando que num tiene un valor int*/
  7. printf("Introduce un numero: ");
  8. scanf("%d",&num);       /* Y aqui estoy indicando que num tiene otro valor ("%d") */
  9. for (x=0; x<=12;x++)
  10. {
  11. result=num*x;
  12. printf("\n%d por %d= %d\n",num,x,result);
  13. }
  14. getch();
  15. return 0;
  16. }
  17.  

Siempre he usado cout y cin , pero ahora que quiero usar el printf y scanf, siento que es como si indicaramos que variable es dos veces, al inicio , y cuando se pide luego.

Alguien me podría explicar cual es la lógica para eso? Muchas Gracias!

Saludos,


« Última modificación: 5 Julio 2013, 10:11 am por Mr.Captcha » En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Doble declaración?
« Respuesta #1 en: 5 Julio 2013, 10:19 am »

Código
  1. int num,x,result;            /* Aqui estoy indicando que num tiene un valor int*/

Esto no es técnicamente correcto. Ahí estás indicando que las variables num, x y result van a utilizarse para manejar números con signo de un tamaño ( generalmente ) de 32 bits.

Es decir, ahí no estás asignando valores, solo reservando memoria para esas variables. De hecho, si haces un printf ... o un cout de cualquiera de esas variables antes de hacer el scanf verás que suelen tener valores extraños... eso es porque la memoria se ha cogido tal cual, sin inicializar.

Debido a que en c y c++ la memoria no se inicializa es necesario hacerlo de forma manual en numerosas ocasiones, como cuando vas a manejar punteros, para evitar resultados extraños.

Con lo cual, en tu programa sólo le das valor a num en la línea 8.


En línea

Mr.Captcha

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Doble declaración?
« Respuesta #2 en: 6 Julio 2013, 08:54 am »

Esto no es técnicamente correcto. Ahí estás indicando que las variables num, x y result van a utilizarse para manejar números con signo de un tamaño ( generalmente ) de 32 bits.

Es decir, ahí no estás asignando valores, solo reservando memoria para esas variables. De hecho, si haces un printf ... o un cout de cualquiera de esas variables antes de hacer el scanf verás que suelen tener valores extraños... eso es porque la memoria se ha cogido tal cual, sin inicializar.

Debido a que en c y c++ la memoria no se inicializa es necesario hacerlo de forma manual en numerosas ocasiones, como cuando vas a manejar punteros, para evitar resultados extraños.

Con lo cual, en tu programa sólo le das valor a num en la línea 8.

Muchas Gracias por tu explicación eferion, soy algo nuevo en c / c++, hace 3 meses que recién empecé la carrera de Informatica. así que estoy con el bicho de preguntar el por qué de todo :)

Hasta el momento solo he usado c++ ( recién ahora que me adapto a c )

Código
  1.  
  2. int main ()
  3. {
  4.    int numero;       // Aqui indico que numero es un valor entero                          
  5.    cout<<"Introduce numero: "<<endl;
  6.    cin<<numero; // Aqui ya no necesito indicar nada para numero porque ya lo puse al principio
  7.    cout<<"El numero que pusiste fue: "<<numero<<endl;
  8.    getch();
  9.    return 0;
  10. }
  11.  
  12.  

Pero si lo hiciera en c, seria:

Código
  1.  
  2. int main ()
  3. {
  4.    int numero;       // Aqui indico que numero es un valor entero                          
  5.    printf("Ingresa Numero:");
  6.    scanf("%f",&numero)         /* Aqui estoy VOLVIENDO a indicar que numero sera por ejemplo ... un flotante?? esto lo podria poner asi? o como seria?  , esto no ocurre cuando uso "cin" */
  7.    printf("El numero que pusiste fue %f",numero)
  8.    getch();
  9.    return 0;
  10. }
  11.  
  12.  

Ahi es lo que me confunde c y c++
Entendí lo que me dijiste sobre que en el segundo ejemplo cuando escribo "int numero" al inicio, no estoy asignando un valor.... pero cuando uso el cout, si?

Muchas Gracias de verdad por tomarte el tiempo de responder.
Saludos,
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Doble declaración?
« Respuesta #3 en: 6 Julio 2013, 12:13 pm »

C++ soporta lo que se llama sobrecarga de funciones, eso permite llamar a la función más adecuada dependiendo del tipo de variable.

C no tiene sobrecarga, por lo que tienes que indicarle tipo de variable (y lo resuelve en tiempo de ejecucion).
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
Mr.Captcha

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Doble declaración?
« Respuesta #4 en: 7 Julio 2013, 04:52 am »

C++ soporta lo que se llama sobrecarga de funciones, eso permite llamar a la función más adecuada dependiendo del tipo de variable.

C no tiene sobrecarga, por lo que tienes que indicarle tipo de variable (y lo resuelve en tiempo de ejecucion).

Ahhh entiendo, no sabia que C no tenia sobrecarga de funciones, ahora entiendo. En conclusión,  es como teclear dos veces el tipo de variable que entrará .. al inicio y luego el usar el scanf.

Gracias!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Declaración de la API ReadFile
Programación Visual Basic
NekroByte 2 2,127 Último mensaje 7 Agosto 2007, 05:37 am
por NekroByte
Declaracion OpenThread?
Programación Visual Basic
fary 5 3,633 Último mensaje 18 Abril 2010, 16:40 pm
por fary
Declaracion Bind
Programación Visual Basic
fary 3 2,360 Último mensaje 4 Agosto 2010, 02:55 am
por Petro_Boca
Error en declaracion
Java
BlackDawn 3 3,069 Último mensaje 30 Noviembre 2010, 19:05 pm
por Casidiablo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines