Autor Tema: PREGUNTA SOBRE PUNTEROS  (Leído 1085 veces)

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

Desconectado ALFREDOSKY

  • PIC16
  • ***
  • Mensajes: 118
PREGUNTA SOBRE PUNTEROS
« en: 19 de Septiembre de 2014, 15:12:06 »
Hola a todos, recurro a los conocedores de c, estoy algo trabado tratando de entender como funcionan los punteros, tengo una base pero muchas cosas aun me confunden como el tratamiento de los datos y elsignificado de cada operacion

si llamo una funcion que escribe en pantalla lo que escribo, asi

EscribirEnPantalla("Uso de punteros");

definida como
void EscribirEnPantalla(char* X)
{
    Escribir(X);
}

void Escribir(char* Z)
{
  //'indice' y 'Buffer' definido en algun lugar...
  //Buffer sera un arreglo de salida para la impresion de la cadena  

  Buffer[indice++] = *Z++;
}

¿como es el comportamiento de los punteros X y Z?
Yo entiendo que al escribir 'Uso de punteros' es alojar en memoria esta cadena completa.

y en la función EscribirEnPantalla, al pasar como argumento un puntero a una variable de tipo char, es como hacer:

X = AEsaPosiciónDeMemoria;  ( o sea, 'X' apunta al primer elemento de la cadena)

Ahora, dentro de la función EscribirEnPantalla hay una función llamada Escribir, lo que no entiendo es ¿por que se pasa sin su operador * a X?, lo que puedo interpretar es que poner 'X' a secas es como referenciar a su contenido, es decir,  'X' es toda la cadena 'Uso de punteros' y que considerando la definición de la función Escribir, la cual pasa un puntero a una variable de tipo char, seria como escribir:

Z = X,  (o sea, 'Z' apunta a 'X', con X = 'Uso de punteros' con lo cual Z también apunta a esa cadena)

Ahora, en la funcion, Escribir, interpreto que se usa el operador * por que en realidad se esta usando la cualidad de apuntador de memoria, y el ++, incrementa la posicion de apuntamiento y es posible llenar el Buffer con el contenido de lo que se escribio en la memoria, o sea se va ir alojando en el Buffer las letras 'U', luego la 's', despues la 'o' y asi sucesivamente hasta completarlo.

La verdad que todo este arroz con mango me enreda un poco, pero me gustaria saber si estoy en lo correcto y alguien me puede aclarar esta dudas existenciales.  :lol:

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: PREGUNTA SOBRE PUNTEROS
« Respuesta #1 en: 19 de Septiembre de 2014, 16:12:19 »
te lo explico a mi manera, quizas lo entiendas mejor, porque te he leido y me he liado yo mas aun xDD

char variable=5;

bien, esta "variable" tiene un valor determinado de memoria RAM, pongamos por ejemplo que esta en la direccion 0x100, pues en esa direccion (0x100) contiene el valor '5'.

char *p;

declaro un puntero 'p', este puntero tambien se le asigna una memoria, por ejemplo 0x200

p=&variable;

ahora estamos diciendo que 'p' contenga la direccion de 'variable', osea en la posicion 0x200 tendremos escrito 0x100 (al igual que en variable contiene '5').

Seguidamente tenemos que aprender a ver el 'valor del puntero', para esto se utiliza un * delante, ten mucho ojo que te puedes confundir entre declararlo y ver el contenido.

Pongamos que queremos cambiar el valor de 'variable' mediante el puntero, para ello lo hariamos asi:

*p=10;

en este momento estamos diciendo que la direccion de memoria a la que apunta 'p' (osea 0x100) contenga '10'. Si vemos el valor de 'variable' veremos que ha cambiado a '10'.


Desconectado ALFREDOSKY

  • PIC16
  • ***
  • Mensajes: 118
Re: PREGUNTA SOBRE PUNTEROS
« Respuesta #2 en: 19 de Septiembre de 2014, 17:54:03 »
MerLiNz gracias por tu respuesta, me ha servido tu explicación, bastante didáctica  ((:-)) y creo que estoy en lo cierto con respecto a la interpretación que le doy a las funciones que puse en mi primer post.


 

anything