Ejercicio 2

Ejercicio 2

de Diego Benjamin Corujo Alanis -
Número de respuestas: 5
Buenas tardes, mi duda es por que si la letra del ejercicio me dice que el string esta representado en un arreglo se usa "char *frase[]" y no "char frase[]" en que varia eso?
En respuesta a Diego Benjamin Corujo Alanis

Re: Ejercicio 2

de Gaston Notte -

Hola Diego, el string puede quedar representado en un arreglo de distintas formas, entre ellas:

- char frase[] = "programacion2";

- char * frase = "programacion2"; 

Si utilizas un puntero a char, este apunta a una dirección de memoria donde se encuentra el primer caracter de la frase, por lo que podrías cambiar directamente los valores alojados en ese espacio de memoria. Una gran ventaja es que puedes pasar ese puntero como parámetro de una función, por lo que tendrías acceso a ese lugar de memoria desde dentro de la función.

Te recomiendo leer sobre punteros para utilizarlos correctamente.

En respuesta a Gaston Notte

Re: Ejercicio 2

de Diego Benjamin Corujo Alanis -
Creo no planteé bien mi pregunta.

Porque si me dicen que el string es un arreglo pasamos como parámetro un puntero a un arreglo? No podría pasar directamente un arreglo y manipular el arreglo? En qué varía eso? Esa sería mi pregunta mejor planteada  


En respuesta a Gaston Notte

Re: Ejercicio 2

de Diego Benjamin Corujo Alanis -
En qué casos es mejor usar el puntero y porqué es mejor hacerlo así? 
En respuesta a Diego Benjamin Corujo Alanis

Re: Ejercicio 2

de Gaston Notte -
Hola Diego, como te indiqué en mi mensaje anterior son dos formas distintas de representar un arreglo, y cualquiera de ellas te va a servir para resolver el ejercicio.
Los arreglos, a diferencia de otras estructuras, pueden ser manipuladas dentro de la función. Por lo tanto, en este caso, puedes manipular el arreglo dentro de la función incluso si no usaste puntero.

Yendo a tu última pregunta, los punteros tienen algunas ventajas, entre ellas la posibilidad de crear estructuras dinámicamente y también pasar eficientemente estas estructuras a través de parámetros en los procedimientos. Si en algún momento tienes que crear estructuras más complejas que un arreglo, para poder modificarlas dentro de un procedimiento necesitarás hacerlo a través de punteros.
En respuesta a Diego Benjamin Corujo Alanis

Re: Ejercicio 2

de Jonathan Gabriel Correa Paiva Correa -
En c++ un arreglo siempre se pasa por referencia en las funciones.
ya que un arreglo de int para el lenguaje es int * a, no importa si tu escribes el parámetro como int a[], int a[10] o int * a, porque a la hora de compilar todos son int *a. Es la única excepción donde pasa esto. ya que las demás variables si puedes elegir entre pasar por valor (se copia el valor a una variable temporal solo para el scope de la función) o por referencia, dirección de memoria.

Si haces la prueba de poner como parametro int a[]; y al llamar la funcion le pones un int, te va a saltar un error de que se esperaba un int *.



Por eso siempre hay que tener cuidado de manipular array en funciones aux.

Luego, pasar por referencia sirve cuando no podes o es más eficiente no tener un retorno.
Tenemos el ejemplo de scanf, nosotros pasamos las variables como referencia porque tu podrías leer más de una variable al mismo tiempo.

scarf("%d %d", &a, &b);
sino tendríamos que hacer 
a = scarf("%d"); // ESTO ES INCORRECTO
sería más ineficiente porque tenes que llamarlo más veces para guardar más de una variable.

En esta respuesta de Stackoverflow hay una animación muy buena para entenderlo un poco mejor.