Silakan lihat kode berikut. Mencoba untuk melewatkan array sebagai char**ke fungsi:
#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;
}
Fakta bahwa saya hanya bisa mendapatkannya untuk mengkompilasi dengan secara eksplisit pengecoran &test2untuk char**sudah mengisyaratkan bahwa kode ini salah.
Tetap saja, saya bertanya-tanya apa sebenarnya yang salah tentang itu. Saya bisa meneruskan sebuah pointer ke sebuah pointer ke sebuah array yang dialokasikan secara dinamis tetapi saya tidak bisa melewatkan sebuah pointer ke sebuah pointer untuk sebuah array di stack. Tentu saja, saya dapat dengan mudah mengatasi masalah dengan terlebih dahulu menetapkan array ke variabel sementara, seperti:
char test[256];
char *tmp = test;
test[0] = 'B';
printchar(&tmp);
Namun, bisakah seseorang menjelaskan kepada saya mengapa itu tidak berhasil dilemparkan char[256]ke char**langsung?
char (*)[256]kechar**?