Lectura
Universidad del Papaloapan
Materia:
Programación Estructurada
Tema:
Punteros
Expositor:
M. C. Bertha López Azamar
Tuxtepec, Oaxaca.
Enero/2005-2006
1
PUNTEROS
M. C. Bertha López Azamar
Un tema muy ligado al uso de arreglos y paso de parámetros por referencia a funciones, es el uso de punteros.
Un puntero, es una variable que contiene ladirección de memoria, de un dato o de otra variable que contiene al dato. (El puntero apunta al espacio físico donde está el dato de la variable).
Puntero
El contenido es una dirección de memoria
3
1000 2
M. C. Bertha López Azamar
Antes de continuar es importante recordar aspectos como los siguientes:
memoria dato
3
Espacio de almacenamiento
Toda variable tiene: • nombre(identificador), • tipo de dato, que permite reservar un espacio de almacenamiento (dirección de memoria) y • contenido .
3
M. C. Bertha López Azamar
El programador al realizar la declaración de la variable, reserva un espacio de almacenamiento en memoria, conoce el nombre, pero el Sistema Operativo (S.O.) es quien asigna la dirección de memoria.
Ejemplo:
Reserva 16 bits de memoriaPermite referenciar ese espacio Tipo de dato nombre de memoria en el código
Edad;
int
//declaración de la variable //asignación del valor
Edad = 28; valor
El S.O. encuentra una espacio libre de memoria y la asocia 3 Edad con el nombre de la nombre 1000 variable.
contenido Dirección de memoria de la variable
4
Un puntero puede apuntar a un objeto de cualquier tipo, incluyendovariables simples, arreglos, estructuras, funciones, etc.
M. C. Bertha López Azamar
Puntero *p 1000
3
Puntero *q ‘C’ 5000
Por esa razón su contenido es una dirección de memoria y no un valor cualquiera.
5
M. C. Bertha López Azamar
Las variables tienen nombre, contenido y dirección de memoria.
edad 3 1000 *q letra ‘C’ 5000 5000 300
6
*p 1000 200
M. C. Bertha LópezAzamar
Al hablar de puntero, se distinguen dos operadores: - operador dirección de: & el cual devuelve como resultado la dirección de su operando. - operador de indirección: * toma el contenido de su operando como una dirección y nos da como resultado el contenido en esa dirección.
7
NOTA:
Los operadores unarios * y & tienen mayor precedencia que los operadores aritméticos +, –, *, /, % eigual precendencia que ++ y --.
Mayor ( ) [ ] -> . ! ~ ++ -- - (tipo) * & */% +> < => == != & ^ | && || ?: = += -= *= /= etc. , sizeof
M. C. Bertha López Azamar
Menor
8
Declaración de un puntero:
M. C. Bertha López Azamar
Un puntero se declara precediendo el identificador que referencia al puntero, por el operador de indirección ( * ), el cual significa “puntero a”. Ladeclaración de un puntero tiene la siguiente sintaxis:
tipo *var_puntero;
donde: tipo.- especifica el tipo de objeto apuntador, puede ser cualquier tipo, incluyendo tipos agregados. var_puntero.- nombre de la variable.
9
Ejemplo: se declaran dos variables simples:
M. C. Bertha López Azamar
int edad; char letra;
edad 1000
letra 5000
Al declarar los punteros para que apunten aestas variables, estos deben ser del mismo tipo de dato que la variable a la que apuntarán.
int *p; char *q;
/*declara p como puntero a un entero*/ /*declara p como puntero a una cadena de caracteres*/ *q *p
200 300
10
Para asignar valores a variables simples, podemos emplear el operador de asignación (=) o la lectura del valor mediante una función de lectura por teclado (por ejemplo:scanf)
M. C. Bertha López Azamar
Para asignar contenido a un PUNTERO, podemos emplear el operador de asignación (=) en conjunto con el operador de dirección (&). Pero NUNCA lea el contenido de una variable puntero con una función de lectura por teclado (por ejemplo: scanf) //asigna la dirección de memoria de la variable al puntero
//asigna un valor a la variable edad = 3; letra = ‘C’;...
Regístrate para leer el documento completo.