[C con Clase] si, esta bien, stl, ¿es la única manera?

Steven Davidson steven en conclase.net
Mar Ene 16 23:36:47 CET 2007


Hola Sorcerer,

El pasado 2007-01-16 21:44:18, Sorcerer escribió:

S> Y en el caso de inicializar el puntero con una cadena de carácteres, por
S> ejemplo:
S> char *p = "Cadena";
S> Ahí si se reserva la memoria automáticamente ?

Aquí sí. El compilador reserva memoria y manipula la cadena de caracteres "Cadena". Luego, se crea el puntero 'p' que se inicializa a la dirección de memoria del primer carácter de la cadena literal.

S> Como con p[] si funciona, pienso que con *p también debería :S

Sí; pero no nos equivoquemos. El array y el puntero no son lo mismo. Es decir,

char *p = "Cadena 1";
char a[] = "Cadena 2";

El compilador reserva un array de 9 caracteres en el que copiará la cadena "Cadena 2". Por el otro lado, 'p' es un puntero cualquiera, que inicialmente apuntará a la cadena literal "Cadena 1", pero puede apuntar a otro carácter posteriormente.

S> O por ejemplo, en el curso en un ejemplo hacen algo parecido a esto:
S> char *p[] = { "Cadena1", "Cadena2", "Cadena3" };
S> Se reservaría la memoria correctamente si uso char **p en vez del arreglo de
S> punteros a char ?

No. En el caso anterior, se indica que se trata de un array de punteros. El compilador se encargará de crear la cantidad necesaria de elementos para el array. Si usas un puntero doble, entonces el compilador no se encargará de nada más que crear 'p' como variable.


Espero haber aclarado la duda.

Steven


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