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?
int f(char* p)在C通常的方式向指针传递p给函数f时p已经指出,你需要(通常是因为有已分配有在你的方法2或方法3的字符数组)的内存位置.
int f(char** p)当您希望能够修改此函数调用者的指针时,C是将指针传递p给函数的常用方法.你的方法1就是一个例子; 你想分配新的内存并用来告诉调用者那个内存在哪里.ffpfp
int f(char*& p) 是C++,而不是C.因为这为你编译,我们知道你使用的是C++编译器.