我试图更多地理解 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;
}
在上面的例子中,我列出了所有我知道的将 char 指针传递给函数的工作方法。我不明白的是Method 1。
char *(&Msg1)
传递给函数的第一个参数是什么意思Foo
?
此外,似乎方法 2和方法 3 被书籍和教程广泛介绍,其中一些甚至将这些方法称为传递数组/指针的最正确方法。我想知道方法 1对我来说看起来很不错,尤其是当我编写我的 API 时,用户可以轻松地将空指针传递给函数,而无需预先分配内存。如果用户忘记释放内存块,唯一的缺点可能是潜在的内存泄漏(与方法 3相同)。有什么理由我们应该更喜欢使用Method 2 或 3而不是Method 3?