Por favor, dê uma olhada no código a seguir. Ele tenta passar uma matriz como uma char**
para uma função:
#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;
}
O fato de que eu só posso obtê-lo para compilar lançando explicitamente &test2
para char**
já sugere que este código está errado.
Ainda assim, estou me perguntando o que exatamente está errado sobre isso. Posso passar um ponteiro para um ponteiro para uma matriz alocada dinamicamente, mas não posso passar um ponteiro para um ponteiro para uma matriz na pilha. Obviamente, posso solucionar o problema facilmente, atribuindo primeiro a matriz a uma variável temporária, da seguinte maneira:
char test[256];
char *tmp = test;
test[0] = 'B';
printchar(&tmp);
Ainda assim, alguém pode me explicar por que ele não funciona para lançar char[256]
a char**
diretamente?
char (*)[256]
parachar**
?