Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: NeoB en 27 Julio 2012, 10:18 am



Título: ¿Esto se puede en C?
Publicado por: NeoB en 27 Julio 2012, 10:18 am
Buenas. Me pregunto si en C hay alguna forma de asignar a una variable el valor de otra como nombre, por ejemplo, si tengo una cadena (introducida por el usuario o no) que contiene "var1", puedo crear una variable que se llame var1; o si se puede acceder a una variable llamada var2, a través de una cadena como "var2".
-> He buscado en google pero...
-> Gracias.


Título: Re: ¿Esto se puede en C?
Publicado por: avesudra en 27 Julio 2012, 12:17 pm
Es un poco complicado pero no imposible , lo que sí es que no puedes declarar variables en mitad de la ejecución con un identificador que no estuviese en el código, es decir yo no puedo hacer que el programa me pida un nombre y asignar ese nombre a un identificador de variable , pero si puedo crear una variable para referirme a ese nombre no se si me explico¿Para que necesitas lo que pides?

¡Un saludo!


Título: Re: ¿Esto se puede en C?
Publicado por: NeoB en 27 Julio 2012, 12:40 pm
Era solo por curiosidad...
Gracias.


Título: Re: ¿Esto se puede en C?
Publicado por: Oblivi0n en 27 Julio 2012, 13:52 pm
según dices, lo que podrías hacer es un array de punteros, a medida que el usuario introduce var1,var2,...,varN , vas creando nuevas variables, luego si quiere acceder a una variable escribiendo varN, buscaría en el array la n-esima posición. Siento la mala explicación, si eso luego hago un codigo


Título: Re: ¿Esto se puede en C?
Publicado por: NeoB en 27 Julio 2012, 14:56 pm
¿Pero eso incluiría el tener que ir creando las variables en tiempo de ejecución, para ir luego guardando su dirección en el array, no? ¿Podrías incluir algo de código porfavor?


Título: Re: ¿Esto se puede en C?
Publicado por: durasno en 27 Julio 2012, 20:35 pm
Hola! como ya te explico avesudra no podes crear variables en tiempo de ejecucion; si podes reservar memoria para trabajar con él.
Para hacer lo que queres tenes que seguir el consejo de Oblivi0n(crear un array de punteros), y ademas tendrias que tener una variable para almacenar el valor de lo que creas. Ejemplo simple:

Código
  1. #define MAX_NAME 10
  2. int main()
  3. {
  4. char *nameVar;
  5. int dato;
  6. nameVar=malloc(sizeof (char) * MAX_NAME);
  7.  
  8. printf("Ingrese nombre de variable\n");
  9. scanf("%s",nameVar);
  10. printf("Ingrese dato\n");
  11. scanf("%d",&dato);
  12.  
  13. return 0;
  14. }
  15.  

Variantes: podrias crear un array de estructuras dinamico. Generalizar el "dato" de tipo void *

Saludos


Título: Re: ¿Esto se puede en C?
Publicado por: ecfisa en 27 Julio 2012, 22:59 pm
Buenas. Me pregunto si en C hay alguna forma de asignar a una variable el valor de otra como nombre, por ejemplo, si tengo una cadena (introducida por el usuario o no) que contiene "var1", puedo crear una variable que se llame var1; o si se puede acceder a una variable llamada var2, a través de una cadena como "var2".
Hola.

En tiempo de ejecución y en  forma directa como infiero de tu mensaje, no es posible. El compilador convierte los identificadores, tales como nombres de variables, en direcciones de memoria; y este proceso no es reversible.

Pero sí podes emularlo mediante un array para entonces acceder por el nombre , como ya te han sugerido.


Saludos.