память malloc на указатель на указатель

Я сталкивался с этой проблемой при использовании указателя на указатель на символ:

<code>void setmemory(char** p, int num)
{
    *p=(char*)malloc(num);
}

    void test(void)
    {
        char* str=NULL;
        setmemory(&str,100);
        strcpy(str,"hello");
        printf(str);
    }

int main()
{
    test();
    return 0;
}
</code>

Приведенный выше код верен, но я не могу понять, почему здесь используется указатель на указатель char ** p? Почему просто использовать указатель на символ? поэтому я изменил этот фрагмент ниже и обнаружил, что он не работает, может кто-нибудь сказать мне, почему? Спасибо!

<code>void setmemory(char* p, int num)
{
    p=(char*)malloc(num);
}

void test(void)
{
    char* str=NULL;
    setmemory(str,100);
    strcpy(str,"hello");
    printf(str);
}

int main()
{
    test();
    return 0;
}
</code>

Ответы на вопрос(4)

Ваш ответ на вопрос