eferion como es eso de que *arreglo[10] es equivalente a **arreglo???
Porque en C en la mayoría de los casos el uso de un array resulta en la dirección en memoria de su primer elemento. El caso usual es la llamada a funcion. Por ejemplo:
#include <stdio.h>
#include <stdlib.h>
void imprimir(char const *texto);
int main(void)
{
char linea[] = "Texto de prueba\n";
imprimir(linea);
return EXIT_SUCCESS;
}
void imprimir(char const *texto)
{
int i;
for (i = 0; texto[i] != '\0'; i++)
}
Tu caso es similar: si el array se declara como "char *arreglo[10]" en expresiones su nombre resulta en un puntero al primer elemento del array ("char *arreglo[10]" ==> "char **")
----
Una ultima pregunta cuando yo declaro un arreglo de punteros char *a[5]; para despues con un for ingresarle cada uno de los elementos (a+1),(a+2),etc..., primero tengo que asignarle memoria dinamica con malloc, calloc?
No exactamente.
Antes de utilizar una variable de tipo puntero debes almacenar en esta una dirección de memoria valida, esta puede ser la retornada por la función malloc, la dirección de algún objeto o una cadena literal. Por ejemplo:
#include <stdio.h>
#include <stdlib.h>
void imprimir(char const *texto);
int main(void)
{
char *nombre[3];
int i;
nombre[0] = "Jesus\n";
nombre[1] = "Maria\n";
nombre[2] = "Jose\n";
for (i = 0; i < 3; i++)
imprimir(nombre[i]);
return EXIT_SUCCESS;
}
void imprimir(char const *texto)
{
int i;
for (i = 0; texto[i] != '\0'; i++)
}
Pero en este caso con el detalle de que las cadenas literales son de solo lectura, no se puedes hacer mas con ellas ademas de imprimirlas.
----
entonces si por ejemplo quiero ingresarle no se... 5 nombres cualquieras:
char *a[5]
*(a+0)="Maria";
*(a+1)="Jose";
etc...
pero no quiero estar contando el numero de letras cada vez que tenga que asignar memoria para cada nombre, como se le asignaria la memoria??
A priori no hay forma. Lo mas sencillo es utilizar un array de caracteres para leer ahí cada una de las cadenas tomando nota de su longitud. Lees una cadena, reservas el espacio justo para ella y la copias ahí. Un programa de ejemplo lo puedes revisar en el tema
Duda Punteros Dobles/Array de punteros.
Un saludo