Punteros (computacion)

Solo disponible en BuenasTareas
  • Páginas : 14 (3393 palabras )
  • Descarga(s) : 0
  • Publicado : 15 de junio de 2011
Leer documento completo
Vista previa del texto
INDICE

Introducción | 2 |
Punteros | 2 |
Aritmética de punteros | 4 |
Operadores de relación | 5 |
Punteros a Botones | 6 |
Punteros a los campos | 7 |
Punteros y Arrays | 7 |
Arrays(Listas y tablas) | 8 |
Punteros y literales de cadena | 9 |
Punteros a elementos Array | 10 |
Punteros a arrays | 10 |
Array de punteros | 10 |
Punteros a métodos | 11 |
Punteros avariables | 12 |
Punteros a punteros | 13 |
Conclusión | 14 |
Bibliografía | 15 |

Introducción
Siempre que se ejecuta un programa, se carga primero (típicamente desde disco) a la memoria del ordenador. De este modo, todos los elementos del programa se ubican en algún lugar de la memoria. La memoria se representa normalmente como series secuenciales de posiciones de memoria; normalmente sehace referencia a estas localizaciones como bytes de ocho bits, pero realmente el tamaño de cada espacio depende de la arquitectura de cada máquina particular y se llamada normalmente tamaño de palabra de la máquina. Cada espacio se puede distinguir unívocamente de todos los demás espacios por su dirección. Para este tema en particular, se establecerá que todas las máquinas usan bytes que tienendirecciones secuenciales, comenzando en cero y subiendo hasta la cantidad de memoria que posea la máquina.

Punteros
Los punteros permiten simular el paso por referencia, crear y manipular estructuras dinámicas de datos, tales como listas encadenadas, pilas, colas y árboles. Generalmente las variables contienen valores específicos. Los punteros son variables pero en vez de contener un valorespecifico, contienen las direcciones de las variables a las que apuntan. Para obtener o modificar el valor de la variable a la que apuntan se utiliza el operador de indirección. Los punteros, al ser variables deben ser declaradas como punteros antes de ser utilizadas.
Respecto a la comparación y a la asignación, los punteros se ajustan a las mismas reglas que cualquier otra variable en C:
• Unpuntero puede utilizarse a la derecha de una declaración de asignación para asignar su valor a otro puntero.
• Podemos comparar dos punteros en una expresión relacional.

#include <stdio.h>
main() {
int i=100, *p1, *p2;
p1 = &i;
p2 = p1;
if (p1==p2) /* estamos comparando dos punteros */
printf(“p1 apunta a la misma dirección de memoria que p2”);
*p1 = *p1 + 2; /* El * tiene másprioridad que el + */
printf (“El valor de *p2 es %d\n”, *p2);
(*p2)++; /* ante la duda de prioridades usamos paréntesis */
printf(“El valor de *p1 es %d\n”, *p1”);
i--;
prinft(“El valor de i es %d\n”, i);
}

A un puntero se le puede asignar:
* El valor de otro puntero, del mismo tipo.
* La dirección de memoria de una variable cuyo tipo coincida en el tipo_base del puntero.Ejemplo:

int x=15, *p1=NULL, *p2=NULL;
p1 = &x; // Se le asigna la dirección de memoria de x
p2 = p1; // Se le asigna el valor de p1
Los dos apuntan a la misma variable

Al igual que otras variables, C no inicializa los punteros cuando se declaran y es preciso inicializarlos antes de su uso.
Todo puntero debe inicializarse, ya que en caso contrario tras ser declarado apuntaría a cualquiersitio (probablemente peligroso) al usarlo puede por ejemplo modificar una parte de la memoria reservada a otra variable. Si aún no sabemos dónde debe apuntar, se le asignará el valor NULL (nulo).

Ejemplo: int *p = NULL;

Las variables tipo puntero deben apuntar al tipo de dato correcto. Si no es así, pueden producirse resultados inesperados. Por ejemplo:

main() {
unsigned char a=255; /*255 en binario es 11111111 (8 bits) */
char *p; /* p es un puntero a un signed char (por defecto) */
p = &a; /* almaceno en p la dir de memoria de la variable a */
printf("%i", *p); /* ¡muestra el valor –1, en vez de 255! */
}
main() {
unsigned int a=269, b; /* 269 en binario: 100001101 (9 bits) */
unsigned char *p; /* p: puntero a unsigned char (8 bits) */
p = &a; /* p supone...
tracking img