[C con Clase] Pregunta: Punteros, Referencias y Enumeraciones

Rolando Kindelan Nuñez rkindelan en estudiantes.uci.cu
Sab Dic 16 06:17:15 CET 2006


 
Hola, saludos desde Tabasco, México.

Tengo unas dudas que quisiera ver si podrían ayudarme a contesta =) :

PUNTEROS:
Un puntero se puede declarar de con la siguiente sintáxis: 


<tipo>* <identificador>;    

y también de la siguiente manera: 

<tipo> *<identificador>; 


Mi duda es, cuando yo quiera declarar más de un puntero en una sola línea, tengo que poner:


<tipo>* <identificador>, <identificador>, identificador>; 

o

<tipo> *<identificador>, *<identificador>, *<identificador>; 

o es exactamente lo mismo? o simplemente no se pueden declarar más de un puntero en una línea? 
 
 
[CORTE] 
 
La forma correcta es la 2da pues el asterisco solo es aplicable al primer <identificador> y los demas son reconocidos como variables de tipo <tipo> a menos que se ndique lo contrario , como se hace efectivamente en el 2do caso.

 
 

REFERENCIAS:
1.- Cuando yo declaro una referencia a una variable, como por ejemplo:

int x = 10;

int&y = x;

y = 4;


Al cambiar el valor de la referencia (y), se cambia el valor de la variable a la que se hace referencia (x) y viceversa? , es decir, si cambio el valor de la variable a la que se hace la referencia (x), también se cambia el valor de la referencia (y) ? 
 
[CORTE]
 
en la inicializacion  anterior int& y = x lo que sucede realmente es que la variable y es una referencia de la x eso significa que ambas comparten la misma ubicacion en la memoria por lo que al modificar una de las dos la otra automaticamente se modifica.
 
 

2.- Otra duda parecida a la de los punteros. Para declarar varias referencias, el signo de ampersand va a lado de la variable o a lado del tipo?
Ejemplo: 

int& a = x, b = w, f = e;

de esta manera o de esta otra? :

int &a = x, &b = w, &f = e;

[CORTE]

se aplica la misma respuesta dada al caso de los punteros.



ENUMERACIONES:
1.- A qué se refiere el texto : "El identificador de tipo es opcional, y nos permitirá declarar más variables del tipo enumerado en otras partes del programa" ?

Significa que si pongo el tipo de dato (enum en este caso), ya no podré declarar otra variable de tipo de dato enum dentro del programa?

2.- En un tipo de datos enum, la sintáxis es: 

enum [<identificador_de_enum>] { <nombre> [= <valor>], ...} [lista_de_variables]; 

Si yo escribo:

enum día { lunes, martes, miércoles, jueves, viernes } dia1, dia2, dia3;

es correcto? Si lo es, entonces: 
Lunes tiene un valor de 0, Martes tiene el valor de 1 y así sucesivamente??

[CORTE]

lo que quieren decir ahi es que el nombre del enumerador es opcional en tu ejemplo el nombre seria: dia, lo que quieren decirte en realidad es que puedes crear lo que se llama un enumerador anonimo, con enumeradores de este tipo no se puede crear un nuevo dato con el tipo del enumerado, ya que el tipo del enumerado se define a traves del nombre que se le da. Por ejemplo: en  el enumerado dia que pones (que por supuesto son correctas tus suposiciones), el tipo del enumerado seria dia y dia1, dia2, dia3 son datos de tipo dia a los cuales se les puede asignar un valor como los que contiene el enumerado dia como: dia1 = lunes; dia2 = viernes, etc.Otra cosa para declarar otra variable de tipo dia basta con poner: dia [lista_de_variables ]

 


3.- Dentro de los valores, puedo asignar directamente los valores sin necesidad de darles un nombre? (Un ejemplo en mi siguiente duda...) 

4.- Si escribo:

enum numeros { 1,2,3,4,5,6 };

Estoy dándole a 1 el valor de 0? O estoy declarando que el primer valor es 1? 
 
[CORTE] 

ahi has incurrido en un error, pues el enumerado se encarga precisamente (dicho de un nombre vulgar) de nombrar los valores con los que trabajaremos, estaria correcto si hubieras puesto: enum numero{_UNO = 1, _DOS,_TRES,_CINCO = 5,_SEIS....} el enumerado ademas da la posibilidad de asignar un valor a un elemento determinado e incrementar en uno ese valor y asignarselo al siguiente y asi sucesivamente, en el ejemplo anterior mi enumerado comienza en 1, incrementa uno hasta que le fijo un nuevo valor 5 el cual sigue incrementando hasta el final o hasta que se le fije un nuevo valor.


5.- Es lo mismo hacer:


enum IdentificadorEnum { ... } variable1, var2, var3;


Que hacer:

enum IdEnum {...};

IdEnum var1 = CualquierValorDentroDe_IdEnum    //Declarar una variable de tipo IdEnum para asignarle 
                                                                         //únicamente valores dentro de IdEnum? 
...
IdEnum CualquierVariable;

 
[CORTE] 

realmente no es lo mismo ya que en el 1er caso variable1, var2, var3; son datos de tipo IdentificadorEnum pero aun no se le ha asignado un valor, o sea no estan inicializadas. y en el otro caso la estas inicializando con un valor determinado del enum

espero haber sido de ayuda...



------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: winmail.dat
Type: application/ms-tnef
Size: 9962 bytes
Desc: no disponible
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20061216/09d34e4c/attachment.bin>


Más información sobre la lista de distribución Cconclase