Esto parece una pregunta tonta. Tengo una matriz de caracteres y quiero almacenar la dirección de la matriz en otra variable, pero parece que no puedo declarar el tipo correcto para la dirección de la matriz (estoy usando gcc):
EN:
int main(void){ char cha[] = "abcde"; char **arrayAddress = &cha; }AFUERA:
arrayaddress.c: In function 'main': arrayaddress.c:3:25: warning: initialization of 'char **' from incompatible pointer type 'char (*)[6]' [-Wincompatible-pointer-types] 3 | char **arrayAddress = &cha; | ^ Esto es de esperar, he leído en otra parte que el tipo de cha debería ser char(*)[6] . Pero cuando trato de declarar arrayAddress con este tipo, mi programa falla:
EN:
int main(void){ char cha[] = "abcde"; char (*)[6]arrayAddress = &cha; }AFUERA:
arrayaddress.c: In function 'main': arrayaddress.c:3:10: error: expected identifier or '(' before ')' token 3 | char (*)[6]arrayAddress = &cha; | ^ make: *** [<builtin>: arrayaddress] Error 1 ^ ¿Cómo defino arrayAddress correctamente?
Las matrices se descomponen en punteros.
char cha[] = "abcde"; char *p1 = cha; char (*arrayptr)[sizeof(cha)] = &cha; cha , &cha[0] y &cha hacen referencia al mismo primer elemento de la matriz cha , la única diferencia es el tipo.
cha y &cha[0] tiene tipo: puntero a char&cha tiene tipo: puntero a una matriz de 6 char de caracteres.Si su compilador admite la extensión typeof (gcc lo hace), entonces puede definir el puntero como:
typeof(char (*)[6]) arrayAddress = &cha;O incluso más limpio como:
typeof(char[6]) * arrayAddress = &cha;