Diferencia entre char y char* en C++

Diferencias entre char C++ puntero y array

Son muy similares pero queda claro que tiene sus diferencias por ejemplo char variable1[]; siempre llevará paréntesis cuadrados en ocasiones con un numero como char variable1[20]; que indica la cantidad de caracteres que puede almacenar o en ocasiones no lo lleva porque su tamaño será asignado de forma automática de acuerdo al tamaño de texto inicial char variable1[] = "Adios mundo";, pero luego no podrá cambiarse su tamaño, por el contrario nos damos cuenta que char* variable1; no tiene paréntesis cuadrados, en algunos ejemplos de código hay quien usa char*; y hay quien usa char[];, pero entonces ¿cuál es la diferencia? y ¿cuál es mejor?.

La diferencia está en que char[] es un array(arreglo) y como recordaran para todo tipo de arreglo indicamos el tamaño de elementos que va a contener el mismo, mientras que char* es un puntero por eso el *(siempre que vean el signo de asterisco en una variable esto indica que la misma es un puntero), es decir que hace referencia a una variable, aunque esta explicación es correcta todavía no quedan claras todas sus diferencias y sus beneficios, veamos.

Ventajas de char*



Al usar char* no tenemos que indicar ningún tamaño por lo tanto nuestra variable de texto aumentará o disminuirá su tamaño de forma dinámica dependiendo la cantidad de texto que la misma guarde, algo parecido a lo que hacíamos con las variables de tipo string, veamos cómo se usa char*.

Ejemplos de char*



#include <cstdlib> /* Aquí contiene la función system("pause"); */
#include <iostream> /* Importamos esta librería para hacer uso de cout y así ver el resultado en pantalla. */

using namespace std;
int main()
{
char* texto = "Adios mundo";
cout << texto << endl;

texto="Nuevo texto que incluso es un poco mas grande";
cout << texto << endl;
system("pause");
return 0;
}


Compilacion de ejemplo char

En el ejemplo anterior vemos los grandes beneficios del puntero sobre el array, y es que no siempre sabemos que tamaño tendrá el texto final por ello tenemos que intentar reservar un espacio muy grande en memoria que al final puede que no necesitemos, en un programa con solo una variable puede que esto no importe tanto pero en programas que requieran decenas y cientos de variables de texto definitivamente se notará la diferencia. Mi recomendación es que usen el modelo "char * variable;" tanto como puedan excepto si algún código o librería les demanda usar char[];.
Comentarios y preguntas