• Lunes 16 de Diciembre de 2024, 00:00

Autor Tema:  Re: Utlizacion de Punteros  (Leído 1146 veces)

Dancing-Mood

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
Re: Utlizacion de Punteros
« en: Miércoles 2 de Julio de 2003, 20:25 »
0
Estoy estudiando punteros, ,(autodidacticamente) y bueno, me viene esta consulta.
La diferencia que veo entre un puntero de arreglos y un arreglo, es mas que nada su manipulacion con el arreglo de punteros puedo cambiar los valores cuando se me plazca,  en cambio con el arreglo no.
Asi que viene mi consulta, un ejemplo de algun programa util (sea agenda, calculadora, etc, etc) para que puedo utilizar un arreglo de puntero??.

Saludos

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Utlizacion de Punteros
« Respuesta #1 en: Domingo 27 de Julio de 2003, 21:06 »
0
Hola, te explico algo acerca de Arreglos y Punteros, espero sirva de guia.

Los punteros y los arreglos son parientes muy cercanos en el lenguaje C.

Todas las operaciones que se pueden llevar a cabo con arreglos se pueden hacer en forma más eficiente utilizando punteros, pero al costo de dificultar su entendimiento.

Sea:

int a[10]; /* arreglo de 10 enteros */
int *pa;   /* puntero a un entero */
entonces:

a es el elemento ubicado a i lugares desde el comienzo del arreglo.

pa = &a[0]; /* pa apunta al primer elemento del arreglo a[10] */

entonces x = *pa; es equivalente a poner x = a[0];

Definición: Si pa apunta a un elemento en particular del arreglo a, pa + i apunta al elemento ubicado i elementos después.

Entonces:

*(pa + 1) es el contenido de a[1];

*(pa + i) es el contenido de a;

*(pa + i) es analogo a escribir pa

Esto es válido para cualquier tipo de variables, sin importar el tamaño en bytes del tipo en cuestión!!!

El compilador pasa argumentos del tipo arreglo como punteros al primer elemento del arreglo, entonces

pa = &a[0]; es equivalente a

pa = a;

también a es equivalente a *(a + i);

Aplicando el operador & (dirección de) vemos:

&a es equivalente a (a + i) -> dirección iésima del arreglo.

La diferencia que existe entre un arreglo y un puntero, es que el puntero es una variable, o sea que puede modificarse, en tanto que un arreglo es un puntero constante y el compilador prohibe su modificación.

Sentencias ilegales:

a = pa;

a++;

Si se pasa un arreglo como argumento a una función, lo que se pasa en realidad es la dirección de memoria del primer elemento del arreglo. Para ejemplificar ésto vamos a programar una función que calcule la cantidad de carácteres que posee un string. Para esto hay que tener en cuenta que los strings son siempre terminados por el carácter NULL.

#include <stdio.h>
int StrLen(char *s)
{
  int n = 0;

  while(*s++)
    n++;
  return n;
}
main()
{
  char *a = "hola";
  printf("%s mide %d carácteresn", a, StrLen(a));
}
 
Esto es todo, ante cualquier duda me consultas... Saludos :guitar:
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»