Está en la página 1de 7

unlversldad del cauca

lacultad de lngenlerla Llectrnlca y 1elecomunlcaclones


rograma de lngenlerla de Slstemas
lng. !ose Luls !urado lnlormtlca l
uN1LkCS LS1kuC1ukAS LN C
Objetivo
El siguiente documento es realizado para los estudiantes de laboratorio de introduccin a la
informtica, para que adquieran y profundicen los conocimientos bsicos en punteros y estructuras,
profundizando en su definicin, uso y aplicaciones en el lenguaje c, con el fin de realizar prcticas
ms complejas utilizando conocimientos adquiridos anteriormente prototipo en c.
PUNTEROS
I NTRODUCCI ON
Un puntero es un tipo de variable que permite almacenar y manipular las direcciones de memoria
donde se encuentran almacenados los datos, en lugar de los datos mismos. El manejo de punteros
en el lenguaje C es muy poderoso y eficiente, aunque demanda extre mo cuidado en su utilizacin.
Bien utilizado hace que el cdigo sea ms compacto y eficiente; por el contrario, su uso descuidado
lleva a tener poca claridad y frecuentemente conduce a la prdida del control de la CPU,
ocasionando un comportamiento indeseable del proceso (vulgarmente se dice que el programa
"revent").
El uso de punteros nos permite acceder al valor de una variable en forma indirecta. Para esto se
utilizan dos operadores:
&El operador "direccin de memoria de" que permite obtener la direcc in de memoria
donde se aloja la variable a la cual precede ( &x es la direccin de memoria de x).
* El operador "contenido de lo apuntado por" que permite acceder al varlor almacenado en
la direccin de memoria que indica el puntero al cual precede *px es el contenido de lo
apuntado por px)
Declaracin de un puntero
Un puntero, en C, se declara de la siguiente forma:
TI PO * nombre_punter o ;
unlversldad del cauca
lacultad de lngenlerla Llectrnlca y 1elecomunlcaclones
rograma de lngenlerla de Slstemas
lng. !ose Luls !urado lnlormtlca l
Donde TIPO es cualquier tipo definido. As, un puntero para caracteres se declarara de la siguiente
forma:
char *pchar;
Diferencia entre "*" y "&"
En C, a diferencia de otros lenguajes de programacin, se puede obtener directamente la direccin
de memoria de cualquier variable. Esto es posible hacerlo con el operador unario "&"; de la
siguiente forma:
char a; / * Variable 'a' de tipo char */
printf("la direccin de memoria de 'a' es: %p \ n", &a);
Para obtener lo apuntado por un puntero se utiliza el operador unario "*" de esta forma:
chor o; /* vorobLe `o` de tpo chor */
chor *pchor; /* Puntero o chor `pchor` */
pchor = 8o; /* `pchor` <- de `o` */
prntJ"Lo dreccon de memoro de `o` es: p \n", 8o);
prntJ"y su contendo es : c \n", *pchor);
Uno de los casos ms comunes donde se ve la relacin entre estos dos operadores es la
declaracin y utilizacin de funciones:
vod luncon J nt *nt_ponter )
Ejemplo
En el siguiente ejemplo se ilustra la inicializacion de un puntero a traves de una funcion.
void inicializa{ char *bu11er )
main{)
(
char *bu11
.
.
.
bu11 = N0LL
unlversldad del cauca
lacultad de lngenlerla Llectrnlca y 1elecomunlcaclones
rograma de lngenlerla de Slstemas
lng. !ose Luls !urado lnlormtlca l
inicializa{ bu11 )
{* en este punto sigue valiendo N0LL *{
.
.
.
]
void inicializa{ char *bu11er )
(
bu11er = malloc {1) {* reservamos memoria *{
*bu11er = 'a' {* y la inicializamos *{
]
.
.
.
unlversldad del cauca
lacultad de lngenlerla Llectrnlca y 1elecomunlcaclones
rograma de lngenlerla de Slstemas
lng. !ose Luls !urado lnlormtlca l
ESTRUCTURAS
Una estructura es un conjunto de una o ms variables, de distinto tipo, agrupadas bajo un mismo
nombre para que su manejo sea ms sencillo.
Su utilizacin ms habitual es para la programacin de bases de datos, ya que estn especialmente
indicadas para el trabajo con registros o fichas. La sintaxis de su declaracin es la siguiente:
struct tpo_estructura
{
tpo_varabe nombre_varabe1,
tpo_varabe nombre_varabe2,
tpo_varabe nombre_varabe2,
),
Donde tipo_estructura es el nombre del nuevo tipo de dato que hemos creado .
Por ejemplo, tipo_variable y nombre_variable son las variables que forman parte de la estructura.
Para definir variables del tipo que acabamos de crear lo podemos hacer de varia s maneras, aunque
las dos ms utilizadas son:
Forma 1
struct trabaador
{
char nombrej20,
char apedosj40,
nt edad,
char puestoj10,
),
struct trabaador 1o, tempora,
Forma 2
struct trabaador
{
char nombrej20,
char apedosj40,
nt edad,
char puestoj10,
) 1o, tempora,
En el primer caso declaramos la estructura, y en el momento en que necesitamos las variables, las
declaramos.
En el segundo las declaramos al mismo tiempo que la estructura. E l problema del segundo mtodo
es que no podremos declarar ms variables de este tipo a lo largo del programa.
unlversldad del cauca
lacultad de lngenlerla Llectrnlca y 1elecomunlcaclones
rograma de lngenlerla de Slstemas
lng. !ose Luls !urado lnlormtlca l
Para poder declarar una variable de tipo estructura, la estructura tiene que estar declarada
previamente. Se debe declarar antes de la funcin main().
El manejo de las estructuras es muy sencillo, es como el acceso a los campos ( o variables ) de
estas estructuras. La forma de acceder a estos campos es la siguiente:
variable.campo;
Donde variable es el nombre de la variable de tipo estructura que hemos creado, y campo es el
nombre de la variable que forma parte de la estructura. Lo veremos mejor con un ejemplo basado
en la estructura definida anteriormente:
tempora.edad=25,
Lo que estamos haciendo es almacenar el valor 25 en el campo edad de la variable temporal de
tipo trabajador.
Otra caracterstica interesante de las estructuras es que permiten pasar el contenido de una
estructura a otra, siempre que sean del mismo tipo naturalmente:
fijo=temporal;
Al igual que con los otros tipos de datos, tambin es posible inicializar variables de tipo estructura
en el momento de su declaracin
struct traba]ador 1i]o=("edro","uernand ez Suarez", 32, "gerente"]
Si uno de los campos de la estructura es un array de nmeros, los valores de la inicializacin
deberan ir entre llaves:
struct notas
(
char nombre{30)
int notas{5)
]
struct notas alumno=("Carlos are dez",(8,7,9,6,10]]
Podemos enviar una estructura a una funcin de las dos maneras conocidas:
1.- Por valor: su declaracin seria:
void visualizar(struct trabajador);
Despus declararamos la variable fijo y su llamada seria:
visualizar(fijo) ;
unlversldad del cauca
lacultad de lngenlerla Llectrnlca y 1elecomunlcaclones
rograma de lngenlerla de Slstemas
lng. !ose Luls !urado lnlormtlca l
2. Por referencia: su declaracin seria:
void visualizar{struct traba]ador *)
Despus declararamos la variable fijo y su llamada seria:
visualizar{81i]o)
Por ejemplo, el desarrollo de la funcin seria:
void visualizar{struct traba]ador *datos)
En la funcin visualizar, el acceso a los campos de la variable datos se realiza mediante el operador
->, ya que tratamos con un puntero. En estos casos siempre utilizaremos el operador ->.
Se consigue con el signo menos seguido de mayor.
Arrays de estructuras
Es posible agrupar un conjunto de elementos de tipo estructura en un array. Esto se conoce como
array de estructuras:
struct traba]ador
(
char nombre{20)
char apellidos{40)
int edad
]
struct traba]ador 1i]o{20)
Podremos almacenar los datos de 20 trabajadores.
Ejemplos sobre como acceder a los campos y sus elementos:
Para ver el nombre del cuarto trabajador, fijo[3].nombre;
Para ver la tercera letra del nombre del cuarto trabajador, fijo[3].nombre[2];.
Typedef
El lenguaje 'C' dispone de una declaracin llamada typedef que permite la creacin de nuevos tipos
de datos.
Ejemplos:
typede1 nt entero,
entero a, b=2,
Su empleo con estructuras esta especialmente indicado. Se puede hacer de varias formas:
unlversldad del cauca
lacultad de lngenlerla Llectrnlca y 1elecomunlcaclones
rograma de lngenlerla de Slstemas
lng. !ose Luls !urado lnlormtlca l
Una forma de hacerlo:
struct trabaador
{
char nombrej20,
char apedosj40,
nt edad,
),
typede1 struct trabaador datos,
datos 1o,tempora,
Otra forma:
typede1 struct
{
char nombrej20,
char apedosj40,
nt edad,
)datos,
datos 1o,tempora,

También podría gustarte