Professional Documents
Culture Documents
Un puntero es una variable que contiene una direccin de memoria. Esa direccin
es la posicin de otra variable. Si una variable contiene la direccin de otra variable se
dice que la primera variable apunta a la segunda.
Variables puntero.
tipo * lpnombre;
donde tipo es cualquier tipo vlido de C (el tipo base del puntero) y lpnombre es el
nombre de la variable puntero. El prefijo lp en la notacin seguida significa puntero.
Para anular un lp es necesario colocar un *.
El tipo base del puntero define el tipo de las variables a las que puede apuntar el
puntero. En teora, cualquier tipo de puntero puede apuntar a cualquier direccin de la
memoria, pero C asume que a lo que apunta un puntero es a un objeto de su tipo base.
int *x;
int ism, y;
x = &ism;
Los operadores * y & poseen mayor precedencia que los operadores aritmticos
pero igual que el monario.
Existen slo dos operaciones aritmticas que se pueden realizar con punteros: la
suma y la resta. Teniendo en cuenta que la aritmtica de punteros difiere de la aritmtica
tradicional; un puntero incrementa (++) o decrementa (--) su valor en relacin con la
longitud de su tipo base. Si la variable es de tipo carcter su valor aumenta en uno, sin
embargo si se trata de un tipo entero su valor aumentara en dos.
p = p + 3;
Punteros y cadenas.
Punteros a punteros.
int **lplpnmr;
lplpnmr es un puntero que apunta a otro puntero que apunta a una variable.
Indireccin simple
Indireccin mltiple
}
especificador_de_tipo nombre_funcin (lista de parmetros)
{
cuerpo de la funcin
}
Antes de poder usar una funcin que devuelva un tipo no entero, se debe hacer
saber su tipo al resto del programa. Si se utiliza una funcin antes de su definicin de
referencia anticipada se genera un cdigo de llamada errneo ya que asume que su valor
de vuelta ser entero. En la definicin de referencia anticipada slo se declara el tipo de
vuelta y el tipo y nmero de parmetros pero no se indica lo que la funcin realmente
hace. La definicin de funcin se realiza en algn otro lugar del programa.
La sentencia return().
Hay dos formas en las que una funcin puede terminar su ejecucin:
cuando se ha ejecutado la ltima sentencia de la funcin y se encuentra la llave } de
final de funcin.
cuando se encuentran una sentencia return(), bien porque se devuelve un valor o par
simplificar el cdigo de la funcin y hacerlo ms eficiente permitiendo mltiples
puntos de salida. Una funcin puede contener varias sentencias return().
Todas las funciones, excepto las de tipo void, devuelven un valor. Este valor se
especifica explcitamente en la sentencia return(). Si una funcin no es especificada
como tipo void y no se especifica un valor de vuelta , entonces el valor de vuelta queda
tcnicamente indefinido, adems de los correspondientes avisos por parte del
compilador.
Todas las funciones que no han sido declaradas como void puede ser usada
como operando en cualquier expresin vlida, pero no puede ser el destino de ninguna
asignacin.
Aunque todas las funciones que no son de tipo void tienen valores de vuelta, la
mayora de las funciones sern de tres tipos:
funciones diseadas para realizar operaciones con sus argumentos y devolver un
valor basado en estos.
funciones que manipulan informacin y devuelven un valor indicando el xito o el
fracaso de la manipulacin.
funciones que no poseen un valor de vuelta explcito. La funcin es de tipo
procedimiento(existentes en otros lenguajes) y no genera un valor.
Aunque una funcin devuelva un valor este no debe ser usado necesariamente en
una sentencia de asignacin, puede ser usado por ejemplo en una sentencia printf().
Las variables definidas dentro de una funcin se llaman variables locales. Las
variables locales empiezan a existir cuando comienza la ejecucin de la funcin y se
destruyen al salir de ella. Las variables locales no pueden retener su valor entre
distintas llamadas a la funcin (excepto variables static)
C utiliza nicamente llamadas por valor, esto implica que no se puede alterar las
variables usadas para llamar a una funcin, sin embargo, se utilizan los punteros para
poder realizar una llamada por referencia.
#include <stdio.h>
#include <conio.h>
Cuando se usa una cadena como argumento de una funcin, slo se pasa la
direccin de la cadena, no una copia de la cadena (se pasa un puntero al primer
elemento de la cadena) es por tanto una excepcin a la llamada por valor que utiliza C.
Devolucin de punteros.
Para indicar que una funcin que no poseen parmetros se debe utilizar la
palabra clave void como lista de parmetros (no es obligatorio pero s una buena
prctica ya que existen compiladores en los que sino se utiliza void y se realiza una
llamada a funcin con un argumento simplemente lo ignora).
Recursividad.
Argumentos de main()
Turbo C admite argumentos para main() que permiten pasar informacin al
programa C usando argumentos de la lnea de ordenes. Un argumento de la lnea de
ordenes es informacin que sigue al nombre del programa en la lnea de rdenes del
sistema operativo. Cuando se compilan programas con la versin de la lnea de rdenes
de Turbo C, se introduce algo como:
tcc nombre_programa
donde nombre programa es el programa que se quiere compilar. El nombre del
programa se pasa a Turbo C como argumento.
los corchetes vacos indican un array de longitud indeterminada. Se puede acceder a los
argumentos de forma individual indexando argv. El nombre del programa ser argv[0];
argv[1] ser el primer argumento...
main() permite un tercer argumento env declarado char *env[] que permite al
programa acceder a la informacin de entorno del sistema operativo.
Un array es una coleccin de elementos del mismo tipo que se referencian por
un nombre comn. A un elemento especfico del array se accede mediante un ndice. En
C todos los elementos de un array constan de posiciones de memoria contiguas. La
direccin ms baja corresponde al primer elemento y la ms alta al ltimo. Los arrays
pueden tener una o varios dimensiones.
Arrays unidimensionales.
}
o como
void fncn( int rry[5])
{
}
o como
void fncn( int rry[])
{
Arrays bidimensionales.
Arrays de cadenas.
Arrays multidimensionales.
Arrays y punteros.
Inicializacin de arrays.
donde lista de valores es una lista de constantes separadas por comas cuyo tipo es
compatible con el tipo del array. La primera constante corresponde al primer elemento
del array, la segunda al segundo...
Estructura.
struct etiqueta{
tipo nombre_variable;
tipo nombre_variable;
.
.
};
donde etiqueta es el nombre de la estructura, no un nombre de variable y puede o no
aparecer.
Hasta este momento no se han declarado variables. Slo se han definido la forma que
van a tener los datos. Para declarar una variable de este tipo estructura se puede realizar:
colocando los nombres de las variables en separadas por comas.
utilizando una sentencia del tipo
struct etiqueta nombre_variable, nombre_variable...
Los elementos de una estructura pueden ser simples o complejos. Los elementos
complejos de una estructura pueden ser otra estructura o un array unidimensional o
multidimensional. Si el elemento complejo es un array para referenciar el array o un
elemento del array sera igual que se ha visto con los arrays pero precedido por el
nombre de la estructura. Si el elemento complejo es una estructura para referenciar un
elemento se comenzara por la estructura de nivel superior, operador punto, siguiente
estructura en orden de anidamiento operador punto...
Punteros a estructuras.
} vrbl;
void fncn(struct jmpl *);
main()
{
.
.
fncn(&vrbl);
}
void fncn(struct jmpl * pntr)
{
pntr->nombre_campo;
.
}
Uniones.
Una unin es una zona de memoria que es compartida por varias variables de
diferentes tipos. La declaracin de unin es similar a la declaracin de estructura
union etiqueta {
tipo nombre_variable;
tipo nombre_variable;
.
.
};
donde todas las variables declaradas comparten la misma posicin de memoria. El
compilador crea una variable suficientemente grande para guardar el tipo ms grande de
la variable union.
Para las uniones es vlido todo lo indicado para las estructuras, declaracin de
variables, acceso a elementos de la unin...
Es tarea del programador controlar que variables de las posibles es almacenada
en el tipo unin en ese momento y a la hora de la recuperacin controlar que variable se
est recuperando. Debe de existir por tanto una variable discriminadora de la variable
existente en cada momento en el tipo unin.
Enumeraciones.
typedef
donde tipo es cualquier posible tipo de datos y nombre es el nuevo nombre que se le ha
asignado. El nuevo nombre se aade a los tipos existentes, no un reemplazamiento.
sizeof()
ARRAYS
30. Programa que lea una sucesin de 10 nmeros enteros, encuentre el valor mximo y
lo imprima junto con l numero de veces que aparece. Se deber utilizar como
mnimo:
Funcin lectura
Funcin mximo.
31. Programa que realice la conversin de nmeros de base decimal a base hexadecimal.
El programa tendr como entrada un numero positivo entre 0 y 32.000 (esta
entrada deber ser verificada)
La salida se efectuar mediante un array de caracteres que contenga la
equivalencia en hexadecimal del numero introducido.
Funciones:
Funcin verificacin.
Funcin clculo-hexadecimal.
32. Realiza un programa que dados dos arrays de caracteres, y utilizando al menos una
funcin devuelva verdadero si son iguales y falso en caso contrario. Se suponen que
dos cadenas son iguales si poseen el mismo numero de elementos y en el mismo
orden relativo, suponiendo que el primer elemento sigue al ltimo.
ACDFE y DFEAC son iguales.
33. Para operar con nmeros naturales de gran tamao, se puede utilizar un array cuyas
componentes sean dgitos decimales (entre 0 y 9). Elaborar un programa que sume
nmeros naturales de 20 cifras por este procedimiento.
34. Realizar un programa que lea una cadena de caracteres y muestre la frecuencia de
cada una de las letras del alfabeto (incluida la ).
35. Realiza un programa que lea un prrafo carcter a carcter y lo muestre
posteriormente. El prrafo acaba cuando encuentra un punto. (El prrafo tendr
como mucho 10 lneas)
36. Realizar un programa que posea como entradas dos cadenas A y B y como resultado
muestre una cadena de caracteres que contenga los caracteres de A que no estn en
B.
37. Realiza un programa que permita implementar el juego del ahorcado.