Bitte schauen Sie sich den folgenden Code an. Es wird versucht, ein Array als char**an eine Funktion zu übergeben:
#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;
}
Die Tatsache, dass ich es nur durch explizites Casting &test2zum Kompilieren bringen kann, char**deutet bereits darauf hin, dass dieser Code falsch ist.
Trotzdem frage ich mich, was genau daran falsch ist. Ich kann einen Zeiger auf einen Zeiger auf ein dynamisch zugewiesenes Array übergeben, aber ich kann keinen Zeiger auf einen Zeiger für ein Array auf dem Stapel übergeben. Natürlich kann ich das Problem leicht umgehen, indem ich das Array zuerst einer temporären Variablen zuweise, wie folgt:
char test[256];
char *tmp = test;
test[0] = 'B';
printchar(&tmp);
Kann mir trotzdem jemand erklären, warum es nicht funktioniert char[256], char**direkt zu besetzen?
char (*)[256]zu übergebenchar**?