我有一個關於將c中的數組傳遞給函數的問題。在c中傳遞數組
當我運行這個程序,它給了我一個分段錯誤
int main()
{
char **ptr= NULL;
test(ptr);
printf("%s", ptr[0]);
return 0;
}
void test(char **ptr)
{
ptr = (char **) malloc(sizeof(char *));
ptr[0] = (char *) malloc(sizeof(char)*5);
strcpy(ptr[0], "abc");
return;
}
但這只是正常工作
int main()
{
char **ptr= NULL;
test(&ptr);
printf("%s", ptr[0]);
return 0;
}
void test(char ***ptr)
{
*ptr = (char **) malloc(sizeof(char *));
*ptr[0] = (char *) malloc(sizeof(char)*5);
strcpy(*ptr[0], "abc");
return;
}
有人能解釋一下爲什麼?
因爲你至少需要三顆星才能在公共場合編程? –
第一個片段通過值傳遞指針指針,因此設置sans-deference的值等價於修改局部變量等等。建議您在C中傳遞參數by-address,這是您的第二個片段正在做的事情。 (注意:第二個代碼片段中的第一個sizeof在技術上是錯誤的,它應該是'sizeof(char **)',或者更容易記住'sizeof(* ptr)'。(和@KerrekSB,+1,這真棒)。 – WhozCraig
你基本上正在修改'test()'函數中的'ptr'。做一個拇指規則 - 如果你正在修改一個函數中的變量,那麼在那裏傳遞變量的地址,因此'char *在這裏通過'char ***'。 –