Autor Tema: PUNTEROS  (Leído 2693 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado YF-21

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 185
PUNTEROS
« en: 25 de Octubre de 2004, 15:28:00 »
¿Algun lugar de la web o alguno de los foristas que pudiera responder a la siguiente cuestion filosofica?

"Un puntero apunta a la direccion de una variable", pero ¿para que sirven?.

Estoy bien confundido desquiciado

Desconectado neocommandos

  • PIC10
  • *
  • Mensajes: 25
RE: PUNTEROS
« Respuesta #1 en: 25 de Octubre de 2004, 16:19:00 »
En C, un puntero como bien dices, apunta a la direccion de una variable o una funcion tambien.
Tienen muchas aplicaciones, por comentar alguna, la comunicacion entre funciones, cuando una funcion ha de devolver varios resultados, no pdemos usar return, ya que esta sentencia solo devuelve el valor de una variable, si el programa trabaja con variables por referencia, se pueden devolver varios valores simultaneamente.

Eso si, podrias solucionar el problema anterior, usando variables globales, pero ocupan espacio en memoria aun cuando no se usen, ademas, de que puedes perder un poco el hilo de que funcion esta controlando dicha variable global en caso de depurar errores.


Un ejemplo de utilizacion de punteros para comunicarse dos funciones...

intercambia(int *u,int *v)
{   
   int temp;

   temp=*u;
   *u=*v;
   *v=temp;
}




main()
{
   int x=5, y=10;

   printf("x = %d e y = %d.
", x, y);  // Muestra los valores antes de intercambiar
   intercambia(&x,&y); // Envia las direcciones de las variables
   printf("Ahora x = %d e y = %d.
", x, y);  // Muestra los valores despues de intercambiar
}



Otra posibilidad es la de trabajar con arrays usando punteros, de forma que puedas manipularlos su contenido o leer sus valores.

E igualmente pueden trabajar con funciones.

Aunque la verdad es que hasta ahora en CCS no he utilizado yo los punteros.

Bueno, espero haberte dado algo de luz...

Desconectado oshow

  • PIC18
  • ****
  • Mensajes: 321
RE: PUNTEROS
« Respuesta #2 en: 25 de Octubre de 2004, 16:35:00 »
De cuestión filosófica nada colega, cuestión práctica
totalmente, se usan en el tratamiento de datos, por
ejemplo, los arrays son en sí punteros, se usan también,
para pasar datos por refencia a las funciones, sirven
para devolver mas de un valor de retorno de una función,
para tratar la memoria de manera dinámica, etc, etc, en
c son muy útiles, es una de las grandes ventajas del c
sobre otros lenguajes, mediante punteros se puede tener
total control sobre el programa y por eso sigue siendo
uno de los lenguajes más usados a pesar de sus "añitos".

Un saludo.

Desconectado YF-21

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 185
RE: PUNTEROS
« Respuesta #3 en: 27 de Octubre de 2004, 20:55:00 »
Lo que me confunde es que habia hecho un programa en C (como no estoy en mi compu no lo tengo a la mano Vacilando) y mas o menos trataba de manejar precisamente un arreglo bidimensional pero me entro la curiosidad de manejar punteros y manejar variables

int array[2][4];

for (x=1;x<=2;x++)
{
    for (y=0;y<=4);y++)
     {
        printf ("[%d]  ",array
  • [y]);
          }
        printf ("

"Giño
}

era algo asi creo, pero me funcionaba "sin usar punteros", es cierto que el intercambio de bytes es muy comodo con punteros ... el apuntar a funciones no lo he hecho, alguno tiene algun ejemplo de punteros a funciones ??

Desconectado oshow

  • PIC18
  • ****
  • Mensajes: 321
RE: PUNTEROS
« Respuesta #4 en: 27 de Octubre de 2004, 21:57:00 »
No entiendo muy bien lo que has querido decir con tu mensaje, no acabo de entender, veo el ejemplo con el array bidimensional, pero no se a que te refieres cuando dices "sin usar punteros" (primero dices que te dió curiosidad por usarlos y luego dices que te funciona sin usarlos???, no entiendo nada).

En cuanto a punteros a funciones, con el ccs tienes que olvidarlo, ya que este compilador no lo permite (el ccs trae bastantes limitaciones respecto a ansi C) creo sin embargo que el hitech y el iar si lo permiten pero no lo aseguro porque no los he probado.


Saludos.

PD: En el foro hay algun ejemplo de punteros a funciones, creo que fue así cuando nos dimos cuenta de que el ccs no permitía este tipo de operaciones.

Desconectado pacalaconcurso

  • PIC24F
  • *****
  • Mensajes: 718
RE: PUNTEROS
« Respuesta #5 en: 28 de Octubre de 2004, 18:52:00 »
recordar que con las matrices se puede operar como si fueran punteros...por eso funcionaSonrisa Gigante.

los punteros son muy útiles para manejar datos complejos como estructuras y para operar con datos sin importar el tipo que sean (copiar una estructura a un array de byte para enviarla por el puerto serie....)

saludos

Desconectado YF-21

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 185
RE: PUNTEROS
« Respuesta #6 en: 30 de Octubre de 2004, 07:58:00 »
Ok, doy por conlcuido el tema ...

GRACIAS A TODOS POR SUS RESPUESTAS ... Rebotado

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: PUNTEROS
« Respuesta #7 en: 30 de Octubre de 2004, 10:41:00 »
Bueno,es una lástima que CCS esté tan limitado en cuanto a la gestión dinámica de la memoria,no permite punteros a funciones ni tampoco reservar memoria para un dato en tiempo de ejecución.Los punteros te permiten crear variables en tiempo de ejecución,así se consigue optimizar el uso de la memoria,sobre todo cuando se manejan estructuras de datos pequeñas pero numerosas.Si mientras estamos ejecutando un programa vemos que necesitamos espacio para un nuevo dato,mediante punteros podríamos asignar memoria para ese dato y tenerlo localizado para cuando nos haga falta,sin que se viera limitado por el número de variables o el espacio reservado para datos de nuestro programa en el momento de compilarlo.
En definitiva,estamos ejecutando...tenemos un dato para guardar,pues le asignamos una posición de memoria y lo guardamos,y así tantos como nos permitan los recursos del micro...y en un momento dado,si uno de esos datos ya no nos sirve,pues liberamos la memoria que ocupa para que otro dato la pueda ocupar si fuera necesario.