Punteros En C++
• Los punteros en el Lenguaje C, son variables que "apuntan", es decir que poseen la dirección de la ubicación en memoria de otra variable. • Por medio de ellos tenemos un método muy interesante para acceder a la memoria. • Es una de las “especialidades” del lenguaje C.
Punteros
• Este tema suele ser bastante conflictivo ya que muchos programadores en otros lenguajes y nuevos enC, lo ven como un método extraño o al menos desacostumbrado, lo que produce cierto rechazo. • Sin embargo, a medida que uno se va familiarizando con ellos, se convierten en una herramienta poderosa.
Punteros
• Se usan fundamentalmente para el manejo de variables complejas, argumentos, etc. • También los utilizamos cuando pasamos un parámetro por referencia a una función. • Tienen tipo, igualque las variables comunes, aunque sólo contengan una dirección se debe indicar el tipo.
Declaración
• La declaración de un puntero se hace de la siguiente forma: tipo *nombre; Ejemplo: int *mens; • mens es un puntero a enteros, debemos incluir siempre el asterisco al declarar punteros.
Declaración
• En forma conjunta podemos declarar variables comunes de un tipo y punteros a variables delmismo tipo. Ejemplo: int base, *mens;
Declaración
• La diferencia entre los tipos de la declaración anterior es: • base es una variable entera común y el compilador reservará el espacio que ocupa una variable entera (p. ej. 2 bytes). • Para mens el compilador reserva el espacio necesario para guardar una dirección.
Aritmética de Punteros
• Si solo guardan una dirección, ¿porqué hay queasignarles un tipo? • Cuando tenemos una secuencia de variables, pretendemos desplazar un puntero recorriéndolas, habiendo declarado el tipo de variable a que apuntan, el sistema sabe cuántos bytes necesita saltar para llegar a la variable siguiente o a la anterior.
Aritmética de Punteros
Si teniendo declarado el puntero p como
float *p ;
Lo movemos un lugar, p. ej.
p++ ;
Eldesplazamiento obtenido es el de un elemento del tipo float.
p
Tamaño de 1 byte
Aritmética de Punteros
Si en cambio lo declaramos como:
int *p ;
y lo movemos nuevamente un lugar:
p++ ;
El desplazamiento obtenido es el de un elemento del tipo int (asumimos 2 bytes).
p
Tamaño de 1 byte
Aritmética de Punteros
Por último si lo hemos declarado como:
char *p ;
y lo movemos unlugar:
p++ ;
El desplazamiento obtenido es el de un elemento del tipo char.
p
Tamaño de 1 byte
Aritmética de Punteros
• Esto se denomina: aritmética de punteros. • Observe que la cantidad de bytes que se desplaza un puntero para saltar de una variable a otra (del mismo tipo) es enteramente dependiente del tamaño que el sistema reserva para ese tipo de variables. • Esto cambia con elcompilador.
Operadores de Punteros
• Declaramos lo siguiente:
char a, b, *c, *d ; c = &a ; *c = 'M' ; d = c ;
• La primera línea dice que c y d son punteros a char. La segunda apunta el puntero c a la dirección de la variable a. (que también es del tipo char)
Operadores de Punteros
• En la tercera línea se hace que el contenido del lugar donde apunta c sea reemplazado por el código dela letra M. • En la cuarta línea hacemos que d apunte a donde apunta c, que es la dirección de la variable a. • Puede haber varios punteros apuntando a una misma dirección.
Operadores de Punteros
• El operador * sirve declarar un puntero. • También sirve, una vez declarado el puntero para conocer el contenido de las posiciones de memoria apuntadas por el puntero. • El operador & significa:la dirección de.
Operadores de Punteros
• Por este motivo en:
c = &a;
• Decimos que c apunta a la dirección de a. • Esto quiere decir que estamos almacenando la dirección de a como contenido de la variable c. • Esto es lo que contiene un puntero.
Operadores de Punteros
• En:
*c = 'M'; d = c;
• Reemplazamos el contenido de la dirección apuntada por c, (lugar de la variable a) con...
Regístrate para leer el documento completo.