Programación General > C/C++
Declaraciones C++
czealt:
mmmm ya, pondre varios ejemplos similares a los ejercicios que pusiste al principio de modo que puedas resolverlos más facilmente.
1. tipos enumerados
// Declaración del tipo enumerado 'Color' con los valores posibles 'Amarillo', 'Azul', 'Rojo', 'Blanco' y 'Verde'.
typedef enum{Amarillo, Azul, Rojo, Blanco, Verde} Color;
// Declaración del tipo enumerado 'Día'
typedef enum{Domingo, Lunes, Martes, Miercoles, Jueves, Viernes, Sabado} Dia;
2. punteros a funciones
Para comenzar, de nuevo la regla:
"Comenzar leyendo la declaración desde el nombre que esta en el parentesis mas interno, despues lee a la derecha y despues a la izquierda. Luego cuando termines de leer el parentesis, saltar hacia afuera y comenzar leyendo de derecha a izquierda nuevamente. Continuar hasta que toda la declaración haya sido leida".
faltaria agregar que durante la lectura cada vez que se encuentre un:
* significa que se tiene un puntero.
( significa que se tiene una funcion.
[ significa que se tiene un arreglo.
Ejemplo: Declaración de un puntero 'pf' a una función que no toma argumentos y devuelve un int
int (*pf)();
Apliquemos la regla anterior para comprobar si es lo que se pidio:
Primero empezamos por el elemento que este dentro de los parentesis más internos. En este caso ese elemento es 'pf'. Vemos qué hay a su derecha, encontramos el parentesis de cierre osea que no hay nada a su derecha. Seguidamente vemos qué hay a la izquierda, encontramos un '*' osea que pf es un puntero. Luego, saliendo de dentro de los parentesis (*pf), a la derecha encontramos un '(' entonces tenemos que pf es un puntero a una función. Como inmediatamente encontramos un ')', la función a la que apunta 'pf' no toma argumentos. Hasta aqui tenemos que pf es un puntero a una función que no toma argumentos. Luego nos toca ver a la izquierda, encontramos un 'int' con lo que concluimos que pf es un puntero a una función que no toma argumentos y devuelve un int.
Ejemplo: Un puntero 'func1' a una función que toma dos argumentos uno int y otro float y no devuelve nada
void (*func1)(int, float);
Empezamos con el identificador 'func1'. Nada a la derecha; a la izquierda un '*' lo cual nos indica que 'func1' es un puntero. Seguimos, a la derecha esta un '(', entonces tenemos que 'func1' es un puntero a una función. Continuamos hasta encontrar el correspondiente ')' y tenemos que 'func1' es un puntero a una funcion que toma como argumentos un int y un float. Finalmente vemos que a la izquierda se encuentra un 'void' con lo que nuestra lectura quedaria como:'func1' es un puntero a una función que toma como argumentos un int y un float y no devuelve valores
En fin, si aun no se entendio, puedes buscar el google poniendo "Declaraciones complejas en C" o algo similar. Aunque si estas comenzando con el lenguaje C (o C++) es mejor que le prestes atención a otros temas más importantes ya que este tipo de declaraciones complejas no se ven mucho cuando uno programa de manera rutinaria.
Saludos ^_^
Carlota:
Ahhhhh! vale... ahora entendi lo de tipo enumerado.
Es decir, realmente no tenia nada que ver con lo que puse al principio xDDDD
a) typedef enum{v,f} logico;
Creo que ahora si esta bien.
Una cosa, por ejemplo en este: Una variable p-v como un puntero a un vector de 8 punteros a float.
Me dice que una variable p-v se encuentra como un puntero --- [es decir, seria: * (p-v) ], a un vector de 8 [aqui tengo dudas... cuando se refiere a un vector habria que poner *(p-v) v[8] no?? punteros [ahora seria *(*(p-v) v[8]) ] a float. [y terminaria float *(*(p-v) v[8]) ]
Supongo que tienes razon con lo de que no se encuentran declaraciones como esta de forma rutinaria, pero me gustaria encontrar las pequeñas diferencias que hay al hablar de punteros, arrays y funciones en este tipo de declaraciones (tambien es porque este ejercicio me llamo la atencion)... muchas gracias por la explicacion que me has dado, te lo agradezco mucho!
czealt:
Antes que nada un par de aclaraciones:
1. p-v no es un nombre de variable válido; seguramente es p_v.
2. vector es sinónimo de arreglo unidimensional (si es que no se está refiriendo al tipo vector del C++).
Ahora, la manera correcta seria:
float *(*p_v)[8];
Saludos. ^_^
Carlota:
Ahora entendi ^_^, cuando habla de vectores se referia a la dimension que tenia y no habia que poner v[DIM] ni nada por el estilo.
Bueno, creo que las demas estan bien... Gracias por tu paciencia! :D
Navegación
[*] Página Anterior
Ir a la versión completa