Arrays y punteros

Páginas: 12 (2841 palabras) Publicado: 1 de marzo de 2015
UNIVERSIDAD CAPITÁN GENERAL GERARDO BARRIOS
FACULTAD DE CIENCIA Y TECNOLOGÍA





Docente: Ing. Alexander Argueta
Materia: Sistemas Operativos
Título: Punteros y Arrays
Presentado por:
Jose Yonis Portillo Martínez
Anthony Bladimir Orellana DelCid
Herberth Remberto Lara Argueta
Francisco Jose Alvares


En C y, por herencia, en C++ los punteros y los arrays tienen una curiosa relación: sonparecidos, en muchos casos intercambiables, pero no son iguales. Y muchos programadores los confunden, aun después de considerable experiencia. En este artículo me propongo aclarar de una vez por todas las diferencias entre estos dos conceptos.
Punteros
Mucho se ha escrito ya sobre punteros de C, por lo que no voy insistir demasiado en ellos: un puntero es la posición de memoria en la que se guarda unavariable. Gran parte de los problemas en entender los punteros que se encuentran los principiantes de C se deben, en mi opinión, a que la palabra puntero se utiliza indistintamente para referirse a la dirección de una variable, al tipo de esa dirección o a una variable de ese tipo. La diferencia es sutil pero importante. Para comprenderla se puede hacer un símil con el tipo más sencillo 'entero'.3: es un entero.
int: es un tipo, de hecho es el tipo del entero anterior.
Si declaro int n; entonces n es una variable de tipo entero. El contenido de esta variable, es decir, el resultado de evaluar la expresión n es un entero. La diferencia entre la variable n y su contenido es análoga a la diferencia entre l-valor y r-valor, de la que ya hablé en alguna ocasión.
Las mismas observaciones sepueden hacer con punteros. Asumiendo la declaración int n;anterior:
&n es un puntero.
int* es un tipo de puntero, de hecho es el tipo del puntero anterior.
Si declaro int *p; entonces p es una variable de tipo puntero-a-entero. No debes confundir la variable con su contenido.
Algunos estudiantes de C se preguntan por qué se declara un puntero con * y no con &. Al fin y al cabo el asterisco se utilizapara acceder al contenido del puntero:
int a, b;
int &p1 = &a; //Error!
int *p2 = &a; //Ok: inicialización
*p2 = 1; //Asigna a 'a' no a 'p2'
p2 = &b; //Asigna a 'p2'
La sintaxis de C cobra sentido si nos damos cuenta de dos cosas.
La inicialización no es asignación. Sintácticamente son dos conceptos separados, que resulta que tienen un efecto práctico similar (más en C que en C++).
Ladeclaración int *p se compone de dos partes: un especificador de tipo (type specifier), que es int, seguido de un declarador (declarator), *p.
Es decir, esta declaración afirma que *p es de tipo int; de esto se deduce que p debe ser de tipo puntero-a-entero.
Este hecho se revela de forma obvia con el ejemplo clásico:
int* p, q;
¿De qué tipo es q? Los blancos están puestos para despistar, pues no tienen valorsintáctico, así que esa declaración se lee como:
Especificador de tipo: int.
Declarador: hay dos, separados por una coma, *p y q.
Por lo tanto, el tipo de p es puntero-a-entero mientras que el de q es simplemente un entero.
Arrays
Un array es un tipo (o una variable, véase la discusión anterior) consistente en una sucesión de valores del mismo tipo de cierta longitud.
La declaración de un array essencilla:
int r[10];
Aquí, int es el especificador de tipo y r[10] es el declarador. Es esto se deduce que el tipo de r es array-de-10-enteros.
Antes decía que había que distinguir entre una expresión, un tipo y una variable. Pues bien, lo más peculiar de los arrays en C es que no existen como expresión, aunque sí como variables y como tipos. Más técnicamente, sí existen expresiones, pero nor-valores de tipo array. Este dato es importante, así que lo voy a repetir:
No existen r-valores de tipo array.
Pero entonces, ¿qué ocurre cuando se evalúa una expresión de tipo array? Que se convierte en un puntero al primer elemento del array. Se dice que el array "decae" (decays) en un puntero. Pero fíjate que el tipo del puntero decaído no es puntero-a-array, sino puntero-a-elemento.
1
2
3
4...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • arrays
  • Arrays
  • Arrays
  • Punteros
  • Arrays
  • Arrays
  • Arrays
  • Los Arrays

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS