PUNTEROS (POINTERS)
CONCEPTO
Un puntero es una variable que en lugar de contener un valor contiene la dirección de otra variable.
DECLARACION
En C un puntero se declara con el signo estrella * entre el tipo de la variable y el nombre de la misma.
-
int *pi /*puntero a una variable detipo int */
ASIGNACION DE UNA DIRECCION A UN PUNTERO (REFERENCIA)
Para asignar una dirección de una variable a un puntero se utiliza el operador unario &.
DEREFERENCIA DE UN PUNTERO.
Dereferencia es la operación de obtener la variable a la cual apunta el puntero. Una vez dereferenciado este todas las operaciones que se efectúen afectarán a la variable a la cual apunta.
Para dereferenciar un puntero se pone el signo estrella * delante del mismo.
-
#include <stdio.h>
main()
{
-
int *pi; /* puntero a una variable detipo int */
int i;
pi=&i; /* pi contiente la dirección de la variable i*/
i=45;
printf ("\n i=%d",*pi); /* dereferencia: visualiza la variable a donde apunta pi es decir: i=45 */
*pi= 100; /* Asigna 100 al valor de i (dereferencia) */
printf("\n i=%d",i); /* visualiza i=100 */
}
-
: Asignación pi=&i; i=45;
dirección
|
contenido
|
$400(pi)
|
$500
|
-----
|
-----
|
-----
|
-----
|
$500 (i)
|
45
|
-----
|
-----
|
: Asignación *pi=100;
dirección
|
contenido
|
$400(pi)
|
$500
|
-----
|
-----
|
-----
|
-----
|
$500 (i)
|
100
|
-----
|
-----
|
Asignación de un vector de tipo char
Similarmente se puede asignar una dirección a una variable de tipo vector de caracteres.
-
#include <stdio.h>
void main()
{
-
char *str;
str="Salve"; /* str contiene tiene la direccion de la constante "Salve"*/
printf("\n %s",str); /* Visualiza Salve gente */
str ="Hola"; /* str contiene la dirección de la constante "Hola" */
printf("\n %s",str); /* Visualiza Hola */
}
-
contenido de la dirección $200 después de str="Salve";
contenido de la dirección $200 después de str="Hola"
Dirección
|
contenido
|
$400
|
`S'
|
$401
|
`a'
|
$402
|
`l'
|
$403
|
`v'
|
$404
|
`e'
|
$405
|
`\0'
|
-----
|
-----
|
$500
|
`H'
|
$501
|
`o'
|
$502
|
`l'
|
$503
|
`a'
|
$504
|
`\0'
|
$505
|
|
-----
|
-----
|
$200 (str)
|
$400
|
-----
|
-----
|
-----
|
-----
|
$200 (str)
|
$500
|
-----
|
-----
|