[C con Clase] Punteros y Arrays

Steven Davidson srd4121 en njit.edu
Mie Mar 18 07:55:40 CET 2009


Hola Abel,

Abel wrote:
> Hola Steven,
> gracias por la respuesta rápida.

De nada; para eso estamo.

> Probé lo que me indicas pero al hacer lo siguiente:
> char (*temp2)[3];
> char **temp3;
> 
> scanf("%s",temp2[0]);
> scanf("%s",temp3[0]);
> 
>  me dá error: Unitialized pointer

Esto será porque no creaste memoria con 'malloc()'. Cuando usamos 
punteros o bien apuntamos a otra variable existente o bien creamos 
memoria para que el puntero apunte a ella.

> Algo que tampoco entendí, yo creía que cuando escibo asi:
> (*temp2)[3];
> creaba un Puntero que apuntaba a un grupo de tres Arrays
> y asi:
> *temp2[3]
> creaba un grupo de Punteros a tres Arrays.
> 

Perdón. No me di cuenta de los paréntesis. La declaración:

char (*temp2)[3];

crea un puntero a un array de 3 elementos de tipo 'char'. Esto implica 
que deberás crear memoria para 3 'char' o apuntar a un array existente. 
Esto sería,

temp2 = temp1;  // no creo que quieras esto

temp2 = (char (*)[3]) malloc( 3 );  // 3 caracteres (bytes)

Para no liarte con esto, aconsejo crear un tipo de dato:

typedef char CADENA3[3];
...
CADENA3 *temp2;

temp2 = (CADENA3 *) malloc( sizeof(CADENA3) );

> Toda esta problemática viene en realidad de un programa que estoy
> escribiendo, en donde quiero hacer lo siguiente:
> 
> char texto[20]="Hola Amigos &como& estan";
> char temp[5][20];
> char (*temp2)[20];
> char **temp3;
> 
> sscanf(texto,"%[^&]&%[^&]&%[^\0]",temp[0],temp[1],temp[2]);//esto funciona
> sscanf(texto,"%[^&]&%[^&]&%[^\0]",temp2[0],temp2[1],temp2[2]);//esto no funciona
> sscanf(texto,"%[^&]&%[^&]&%[^\0]",temp3,temp3,temp3);//esto no funciona
> 

Nuevamente, _DEBES_ crear memoria dinámicamente si usas punteros o como 
ya dije antes, puedes usar punteros para apuntar a otra variable que ya 
exista.


Espero que esto te sirva.

Steven





Más información sobre la lista de distribución Cconclase