求下面两段代码详细解释


void GetMemory(char*& memorystr, int num)
{
    memorystr = new char[num];
}

int main(void)
{
    char* str = NULL;
    GetMemory(str, 6);
    memcpy(str, "china", 5);

    std::cout << str;
    return 0;
}


void GetMemory(char** memorystr, int num)
{
    *memorystr = new char[num];
}

int main(void)
{
    char* str = NULL;
    GetMemory(&str, 6);
    memcpy(str, "china", 5);

    std::cout << str;
    return 0;
}

我想问的问题:

两个都可以将china拷贝到str里面,它们是否等效?但是他们的优劣势?什么情况下该用那种?

就你的代码来说是一样的,都可以

以这两个例子的应用来说,此两者等效。
如果在函数外有对所传参数的指针进行调用修改参数内容,如额外有个char* str2的变量,则当发生 str->str2做地址调用时,这两者会有区别。
这两者没有什么优劣势可言,只看实际应用中对地址调用的需求情况如何而采用不同的调用方式。正常情况下只用**二级指针方式。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632