Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: pedroedlp en 11 Abril 2014, 04:19 am



Título: Cadenas de caracteres con punteros
Publicado por: pedroedlp en 11 Abril 2014, 04:19 am
Estoy estudiando C, y hasta ahora las cadenas de caracteres las venia creando asi:

Código:

char cadena[] = "Hola como te va";


pero ahora me encontre que tambien se puede hacer asi:

Código:

char* cadena = "Hola como te va";


y no entiendo porque funciona, osea por lo que entiendo los punteros son para aputar a direcciones de otras variables, pero en este caso lo estaria usando para guardar en el una cadena de texto, no entiendo porque funciona, porque crea en el un array.


Título: Re: Cadenas de caracteres con punteros
Publicado por: rir3760 en 11 Abril 2014, 05:44 am
Estoy estudiando C, y hasta ahora las cadenas de caracteres las venia creando asi:
Código
  1. char cadena[] = "Hola como te va";
Esa sentencia declara al array "cadena" y sus elementos se inicializan con 'H', 'l', etc.

pero ahora me encontre que tambien se puede hacer asi:
Código
  1. char *cadena = "Hola como te va";
y no entiendo porque funciona [...] en este caso lo estaria usando para guardar en el una cadena de texto
Funciona porque el valor inicial del puntero "cadena" es la dirección en memoria donde se almacena la cadena literal "Hola como te va". No se esta almacenando en el la cadena sino su dirección. Caso similar con el cartero: el no confunde la dirección en el sobre (un puntero) con el objeto que debe localizar (la casa).

Un saludo


Título: Re: Cadenas de caracteres con punteros
Publicado por: pedroedlp en 11 Abril 2014, 19:55 pm
Esa sentencia declara al array "cadena" y sus elementos se inicializan con 'H', 'l', etc.
Funciona porque el valor inicial del puntero "cadena" es la dirección en memoria donde se almacena la cadena literal "Hola como te va". No se esta almacenando en el la cadena sino su dirección. Caso similar con el cartero: el no confunde la dirección en el sobre (un puntero) con el objeto que debe localizar (la casa).

Un saludo

pero si vos me decis que en ese puntero se almacena la direccion de la cadena "Hola como te va", porque cuando quiero imprimir la cadena no se pone el astarisco?

Código:

    char *cadena = "Hola como te va";
    printf("%s", cadena);




Título: Re: Cadenas de caracteres con punteros
Publicado por: leosansan en 11 Abril 2014, 21:12 pm
pero si vos me decis que en ese puntero se almacena la direccion de la cadena "Hola como te va", porque cuando quiero imprimir la cadena no se pone el astarisco?

Código:

    char *cadena = "Hola como te va";
    printf("%s", cadena);



Porque el puntero apunta al primer caracter de la cadena, ni más ni menos. Otra cosa es la cadena entera.

Puedes comprobarlo con:


Código
  1. printf("%c", *cadena);

Citar
H

¿Ves como apunta al primer caracter?. Ya si quieres la cadena entera usas cadena sin el asterisco inicial y, como cadena que es, con el formato %s en el printf.

¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


Título: Re: Cadenas de caracteres con punteros
Publicado por: rir3760 en 12 Abril 2014, 17:25 pm
pero si vos me decis que en ese puntero se almacena la direccion de la cadena "Hola como te va", porque cuando quiero imprimir la cadena no se pone el astarisco?
Código
  1. char *cadena = "Hola como te va";
  2. printf("%s", cadena);
Porque cuando utilizas la función printf con el especificador "%s" esta espera la dirección en memoria (puntero) del objeto (array) cuyo contenido (cadena) debe procesar (imprimir).

En el lenguaje C los arrays no se pasan por valor, en su lugar se pasa su dirección en memoria.

Un saludo