将char指针/数组传递给函数

Y. *_*ang 2 c c++ pointers char char-pointer

我试图更多地了解C中的char指针,但有一件事让我感到兴奋.

假设我想将char指针传递给函数并更改指针所代表的值.一个例子如下:

int Foo (char *(&Msg1), char* Msg2, char* Msg3){
    char *MsgT = (char*)malloc(sizeof(char)*60);
    strcpy(MsgT,"Foo - TEST");
    Msg1 = MsgT; // Copy address to pointer
    strcpy(Msg2,MsgT); // Copy string to char array
    strcpy(Msg3,MsgT); // Copy string to char pointer
    return 0;
}

int main() {
    char* Msg1; // Initial char pointer
    char Msg2[10]; // Initial char array
    char* Msg3 = (char*)malloc(sizeof(char) * 10); // Preallocate pointer memory
    Foo(Msg1, Msg2, Msg3);
    printf("Msg1: %s\n",Msg1); // Method 1
    printf("Msg2: %s\n",Msg2); // Method 2
    printf("Msg3: %s\n",Msg3); // Method 3
    free(Msg1);    
    free(Msg3);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我列出了我知道的将char指针传递给函数的所有工作方法.我不明白的是方法1.

char *(&Msg1)传递给函数的第一个参数的含义是Foo什么?

此外,它似乎是方法2方法3通过书籍和教程被广泛引入,有的甚至指这些方法是最正确的方式来传递数组/指针.我想知道方法1对我来说非常好看,特别是当我编写API时,用户可以轻松地将空指针传递给函数而无需预先分配内存.如果用户忘记释放内存块,则唯一的缺点可能是潜在的内存泄漏(与方法3相同).有什么理由我们应该更喜欢使用方法2或3而不是方法3

Dav*_*d K 7

int f(char* p)在C通常的方式向指针传递p给函数fp已经指出,你需要(通常是因为有已分配有在你的方法2或方法3的字符数组)的内存位置.

int f(char** p)当您希望能够修改此函数调用者的指针时,C是将指针传递p给函数的常用方法.你的方法1就是一个例子; 你想分配新的内存并用来告诉调用者那个内存在哪里.ffpfp

int f(char*& p) 是C++,而不是C.因为这为你编译,我们知道你使用的是C++编译器.