Autor
|
Tema: ¿Pregunta puntero a char en c++? (Leído 6,585 veces)
|
Zodiak98
Desconectado
Mensajes: 120
|
Hola bueno tengo una duda por ejemplo una variable de tipo char almacena 1 solo dato pero en un ejemplo vi un código en el cual hay un puntero de tipo char asi:
char* nombre = "Yahoo";
Qué según tengo entendido es para que la variable de tipo char almacene ma sde 1 dato, pero ahora aquí vamos a mi duda porqué se coloca el simbolo de indirección(*) porque mejor no hacerlo con un array? O es qué al colocar ese puntero esa variable se convierte en un array? Expliquenme detalladamente por favor...
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
Los char* son la excepción a los punteros. Por ayuda sintactica se permite: char nombre[] = "Yahoo"; char* nombre = "Yahoo";
Ambos significan lo mismo. De hecho un array no es más que un puntero a su primer elemento.
|
|
|
En línea
|
|
|
|
Zodiak98
Desconectado
Mensajes: 120
|
Los char* son la excepción a los punteros. Por ayuda sintactica se permite: char nombre[] = "Yahoo"; char* nombre = "Yahoo";
Ambos significan lo mismo. De hecho un array no es más que un puntero a su primer elemento. Hehe grax me aclaraste la duda pero una cosa pero podrias explicarme este concepto: De hecho un array no es más que un puntero a su primer elemento.
La verdad soy nuevo, perdona mi ignorancia. D: Sí se que es un arreglo, pero no entendi ese concepto podrias explicarmelo? Si puedes un ejemplo tmb.
|
|
|
En línea
|
|
|
|
durasno
Desconectado
Mensajes: 373
|
Tal vez: El nombre del array no es mas que un puntero que apunta al primer elemento xD. Al ser un puntero se lo puede tratar como tal, por ejemplo: char arrNombre[]="Yahoo"; printf("%c\n",arrNombre [i ]); /* imprime un caracter usando subindices */
printf("%c\n",*(arrNombre+i)); /* imprime un caracter usando aritmetica de punteros */ Saludos PD: en el proceso de compilacion se traduce arrNombre en *(arrNombre+i)
PD: según tengo entendido es para que la variable de tipo char almacene ma sde 1 dato la palabra no seria almacenar sino apuntar, ya que en el caso del char * lo que hace nombre es apuntar a la direccion donde se encuentra la palabra "Yahoo"
|
|
|
En línea
|
Ahorrate una pregunta, lee el man
|
|
|
Zodiak98
Desconectado
Mensajes: 120
|
Tal vez: El nombre del array no es mas que un puntero que apunta al primer elemento xD. Al ser un puntero se lo puede tratar como tal, por ejemplo: char arrNombre[]="Yahoo"; printf("%c\n",arrNombre [i ]); /* imprime un caracter usando subindices */
printf("%c\n",*(arrNombre+i)); /* imprime un caracter usando aritmetica de punteros */ Saludos PD: en el proceso de compilacion se traduce arrNombre en *(arrNombre+i)
PD: la palabra no seria almacenar sino apuntar, ya que en el caso del char * lo que hace nombre es apuntar a la direccion donde se encuentra la palabra "Yahoo"
Wey disculpa mi ignorancia pero no te entendi lo que quiero saber es porque un arreglo no es mas que un puntero que apunta a su primer elemento. osea por ejemplo: char foro[] = "ElHacker.Net"; Osea que foro[] es un puntero hacia E? y E Apunta hacia los demas caracteres.?? No entiendo solo quiero saber eso.
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
y E Apunta hacia los demas caracteres.?? No, los demás caracteres están consecutivos en la memoria. De modo que solo tiene que ir avanzando.
|
|
|
En línea
|
|
|
|
SARGE553413
Desconectado
Mensajes: 176
|
Saludos. Un array es un puntero al primer elemento de éste, como dices en tu ejemplo, efectivamente apunta a la letra 'E'. De hecho te invito a que pruebes esto: char c[]="Puntero"; cout<<*c<<endl; cout<<*(c+(1*sizeof(char)))<<endl;
Comprobarás que sale por pantalla la letra 'P' y luego la 'u'. Pero un array tiene la salvedad de que está indexado, es decir, podemos acceder a sus componentes sin pasar primero por todas las anteriores (por ej. v[5] --> accedo directamente a la 6ª componente), cosa que por ej. una lista enlazada de nodos, no. No estoy seguro, pero al acceder a los índices del array en cuestión, me imagino que tomará el puntero al primer elemento y le sumara n*sizeof(<tipo_array>), tal como he hecho en mi ejemplo. Saludos.
|
|
|
En línea
|
|
|
|
Zodiak98
Desconectado
Mensajes: 120
|
Saludos. Un array es un puntero al primer elemento de éste, como dices en tu ejemplo, efectivamente apunta a la letra 'E'. De hecho te invito a que pruebes esto: char c[]="Puntero"; cout<<*c<<endl; cout<<*(c+(1*sizeof(char)))<<endl;
Comprobarás que sale por pantalla la letra 'P' y luego la 'u'. Pero un array tiene la salvedad de que está indexado, es decir, podemos acceder a sus componentes sin pasar primero por todas las anteriores (por ej. v[5] --> accedo directamente a la 6ª componente), cosa que por ej. una lista enlazada de nodos, no. No estoy seguro, pero al acceder a los índices del array en cuestión, me imagino que tomará el puntero al primer elemento y le sumara n*sizeof(<tipo_array>), tal como he hecho en mi ejemplo. Saludos. Orale amigo gracias alfín entiendo xDD Bueno osea que esto: char c[]="Puntero"; cout<<*c<<endl; cout<<*(c+(1*sizeof(char)))<<endl;
y esto: char c[]="Puntero"; cout << c[0] << endl; cout << c[1] << endl;
Es exactamente lo mismo, o existe alguna diferencia? A mi parecer es exactamente lo mismo. Pero claro soy un novato xD
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
Es exactamente lo mismo.
De hecho [] es un operador de punteri E_E
|
|
|
En línea
|
|
|
|
x64core
Desconectado
Mensajes: 1.908
|
Aclarar que estas declaraciones no equivalen exactamente lo mismo:
char nombre[] = "Yahoo"; char* nombre = "Yahoo";
El primero Declara un array de char´s y copia la cadena "Yahoo" al array. El segundo es de un puntero a la cadena por lo tanto lo unico que se copia el la dirección de la cadena.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
martiz de char doble puntero
Programación C/C++
|
neo_from_cs_matrix
|
2
|
6,595
|
15 Julio 2011, 00:05 am
por rir3760
|
|
|
Problema: Tamaño de Puntero char
Programación C/C++
|
yovaninu
|
8
|
6,565
|
16 Agosto 2011, 14:56 pm
por Gallu
|
|
|
duda doble puntero char a matriz de char
Programación C/C++
|
neo_from_cs_matrix
|
3
|
6,251
|
5 Septiembre 2011, 03:53 am
por rir3760
|
|
|
Ayuda convirtiendo puntero void a unsigned char y obtener su valor
Programación C/C++
|
harry_the_blogger
|
4
|
3,388
|
5 Octubre 2014, 21:40 pm
por harry_the_blogger
|
|
|
Pasar vector de puntero a char a las funciones[C]
« 1 2 »
Programación C/C++
|
NOB2014
|
16
|
10,963
|
22 Junio 2016, 14:56 pm
por NOB2014
|
|