gpt4 book ai didi

c++ - 将字符指针/数组传递给函数

转载 作者:太空狗 更新时间:2023-10-29 23:50:58 25 4
gpt4 key购买 nike

我想更多地了解 C 中的字符指针,但有一件事让我无法理解。

假设我想将一个 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;
}

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

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

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

最佳答案

int f(char* p) 是 C 中传递指针 p 到函数 f 的常用方式,当 p 已经指向您需要的内存位置(通常是因为在您的方法 2 或方法 3 中已经分配了一个字符数组)。

int f(char** p) 是 C 中将指针 p 传递给函数 f 的常用方法f 能够为该函数的调用者修改指针 p。您的方法 1 就是一个例子;您希望 f 分配新内存并使用 p 告诉调用者该内存在哪里。

int f(char*& p) 是 C++,而不是 C。由于这是为您编译的,我们知道您使用的是 C++ 编译器。

关于c++ - 将字符指针/数组传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24890237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com