¿Pregunta puntero a char en c++?

Iniciado por Zodiak98, 21 Abril 2013, 23:57 PM

0 Miembros y 2 Visitantes están viendo este tema.

amchacon

Ambas sentencias son equivalentes puesto que tienen el mismo uso de memoria y se usan igual.

Además cómo ya hemos dicho,  un array no es más que un puntero a su primer elemento.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

rir3760

Cita de: Zodiak98 en 21 Abril 2013, 23:57 PMtengo una duda por ejemplo una variable de tipo char almacena 1 solo dato
Correcto. Si deseas almacenar mas no hay otra opción que utilizar un array.

Cita de: Zodiak98 en 21 Abril 2013, 23:57 PMpero 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
No. Una variable de tipo "puntero a T" solo puede almacenar la dirección de un objeto, lo que almacene el objeto apuntado es otra historia.

Cita de: Zodiak98 en 21 Abril 2013, 23:57 PMpero ahora aquí vamos a mi duda porqué se coloca el simbolo de indirección(*)
Porque es una declaración y en ella la única forma de indicar que la variable es un puntero es mediante el carácter '*', no hay '*' entonces no hay puntero:
int numero; /* variable de tipo "int" */
int *p;     /* variable de tipo "puntero a int" */


----

Cita de: amchacon en 23 Abril 2013, 10:35 AMAmbas sentencias son equivalentes puesto que tienen el mismo uso de memoria y se usan igual.
No. Ya lo indicaron durasno y x64Core, solo voy a explicarlo un poco mas.

Cuando se declara un array puede utilizarse como valor inicial una cadena literal pero esta es equivalente a una lista de valores. Siguiendo tu ejemplo:
/* Esta declaracion ... */
char nombre[] = "Yahoo";

/* ... se termina procesando de esta forma */
char nombre[] = {'Y', 'a', 'h', 'o', 'o', '\0'};


Otra historia es la declaración de un puntero inicializando este mediante una literal:
char* nombre = "Yahoo";
Aquí la cadena literal "Yahoo" es de tipo array de caracteres, se almacena en alguna dirección en memoria y es esa dirección el valor inicial del puntero.

Cita de: amchacon en 23 Abril 2013, 10:35 AMAdemás cómo ya hemos dicho,  un array no es más que un puntero a su primer elemento.
No. Los arrays y punteros son objetos distintos.

El detalle (o problema, depende de la perspectiva) es: denotar (referirse a) un array mediante su nombre o una expresión resulta (salvo contados casos) en la dirección del primer elemento del array.

El caso mas conocido es el uso de scanf, cuando se trata con esta de leer una palabra utilizamos el nombre de un array sin el operador '&':
char nombre[100];
char (*p)[100] = &nombre;

/* Para indicar que array usar utilizamos: */

puts("Teclea tu nombre:");
scanf("%s", nombre /* 1) Su nombre */);

puts("Teclea tu nombre:");
scanf("%s", *p /* 2) Una expresion */);


Uno de los pocos casos donde ello no aplica es el uso del operador sizeof, si su argumento es un array declarado en el mismo ámbito este reportara correctamente el tamaño del array.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language