C/Visual C - Dudas sobre punteros

   
Vista:

Dudas sobre punteros

Publicado por Javi (5 intervenciones) el 21/08/2008 12:52:55
Hola a todos. Tengo una duda sobre los punteros en C. Veamos(Si me equivoco en algo que alguien me lo diga), yo se lo que es una variable declarada así:

int *x;

X guarda una dirección de memoria(apunta a una dirección de memoria) donde reside el valor.

Pero lo que ya me pierde bastante es en un ejercicio que tengo que hacer, en el cual me dan variablse con la siguiente estructura:

char ****car1
char ***car2

Alguien me puede explicar como funcionan??

gracias y un saludo!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Dudas sobre punteros

Publicado por zeros (4 intervenciones) el 21/08/2008 17:04:30
Hola!
Sin duda los apuntadores es lo mas dificil de entender, por algo han sido abstraidos en C# y java. Vamos a ver si te puede ayudar.

1. int *x; // x almacenará una direccion de memoria, la cual almacenara un entero.

2. char *cad; // cad almacenará una direccion de memoria, la cual almacenará un caracter

3. char **cad; // cad almacenará una direccion de memoria, la cual almacenará otra direccion de memoria ésta ultima almacenará un caracter. A esto se le conoce como apuntador a un arreglo bidimensional o matriz.

Ejemplo:

asumamos que la direccion de cad = 1000H // H quiere decir hexadecimal, que es como se maneja el direccionamiento de la memoria.

// Asumiendo que ya hiciste la reserva de memoria con el malloc y esas cosas.
tu puedes hacer esto:
cad[0][0] = 'a';
cad[0][1] = 'b';



y si quieres imprimir dicho numero:
printf(" %c ",*(*(cad)) ) // La salida seria a
printf(" %c", cad[0][0]) // La salida seria a
printf(" %c", *(*(cad+1))) // La salida seria b
printf(" %c", *(&(cad+1))) // La salida seria la direccion de memoria cuyo contenido es b

es decir que un apuntador doble ** lo puedes tratar como un arreglo bidimensional,
un apuntador triple *** como un arreglo tridimensional y asi sucesivamente

en tu caso:
char ***car2
//Despues de la reserva de memoria (que no me acuerdo como es)

puedes manipularla como un arreglo tridimensional
car2[x][y][z] = 'a'
// Pero usando apuntadores lo logico o lo elegante seria usar.
*(*(*(car2)) ) = 'a'

Espero que te halla ayudado en algo, se que es dificil incluso para mi aun es algo dificil dominar los apuntadores y mas aun si son dobles o triples.
Saludos!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar