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

标签 c++ c pointers char char-pointer

我想更多地了解 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/

相关文章:

c++ - 为什么在从 dll 内部调整 vector 大小时会出现堆损坏?

c++ - error : expected constructor, 析构函数,或者静态模板中 ‘'之前的类型转换

C指针循环中的奇怪行为

c++ - C++中的非空终止字符数组

C++11:thread_local 或 OpenCL 1.2 cl_kernel 对象数组?

c++ - C++ 与 Java 中的构造函数和变量名称

c - 我的 char 指针一直被 gcc 解释为整数

c - 是否可以在 C 开关/案例中使用正则表达式作为案例

c - 如何在C中将int打印到char类型的数组变量中?

c - 从枚举 * 到枚举的不兼容赋值