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