Por favor, eche un vistazo al siguiente código. Intenta pasar una matriz como a char**a una función:
#include <stdio.h>
#include <stdlib.h>
static void printchar(char **x)
{
printf("Test: %c\n", (*x)[0]);
}
int main(int argc, char *argv[])
{
char test[256];
char *test2 = malloc(256);
test[0] = 'B';
test2[0] = 'A';
printchar(&test2); // works
printchar((char **) &test); // crashes because *x in printchar() has an invalid pointer
free(test2);
return 0;
}
El hecho de que sólo puedo que se compile por colada de manera explícita &test2a char**que ya da a entender que este código es incorrecto.
Aún así, me pregunto qué tiene de malo exactamente. Puedo pasar un puntero a un puntero a una matriz asignada dinámicamente, pero no puedo pasar un puntero a un puntero para una matriz en la pila. Por supuesto, puedo solucionar fácilmente el problema asignando primero la matriz a una variable temporal, así:
char test[256];
char *tmp = test;
test[0] = 'B';
printchar(&tmp);
Aún así, puede que alguien me explique por qué no funciona para echar char[256]a char**directamente?
char (*)[256]achar**?