Lütfen aşağıdaki koda bir göz atın. Bir diziyi char**işleve bir olarak geçirmeye çalışır :
#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;
}
Sadece açıkça dökerek derlemesini sağlayabiliyorum &test2 ile char**zaten bu kodu yanlış olduğunu ima.
Yine de, bunun tam olarak neyin yanlış olduğunu merak ediyorum. Bir işaretçiyi dinamik olarak ayrılmış bir diziye bir işaretçi geçirebilir ancak yığın üzerinde bir dizi için bir işaretçi bir işaretçi geçiremezsiniz. Tabii ki, ilk önce geçici bir değişkene dizi atayarak sorunu kolayca çözebilirim:
char test[256];
char *tmp = test;
test[0] = 'B';
printchar(&tmp);
O döküm için çalışmıyor neden Yine kutu birisi bana açıklayabilir char[256]için char**doğrudan?
char (*)[256]veriyorchar**?