我试图更多地理解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指针传递给函数的工作方法。我不明白的是方法1。
char *(&Msg1)
传递给函数的第一个参数的含义是Foo
什么?
同样,方法2和method3似乎已被书籍和教程广泛介绍,其中有些甚至将那些方法称为传递数组/指针的最正确方法。我不知道方法1对我来说看起来很好,尤其是当我编写API时,用户可以轻松地将null指针传递给函数而无需预先分配内存。如果用户忘记释放内存块(与方法3相同),则唯一的缺点可能是潜在的内存泄漏。有什么理由让我们更喜欢使用方法2或3而不是方法3吗?
int f(char* p)
是C中通常的方法,当它已经指向您需要的存储位置时(通常是因为方法2或方法3中已经分配了一个字符数组),就将指针传递p
给该函数。f
p
int f(char** p)
是您希望能够为该函数的调用者修改指针时C中将指针传递p
给该函数的常用方法。您的方法1就是一个例子。您想分配新的内存并用来告诉调用者该内存在哪里。f
f
p
f
p
int f(char*& p)
是C ++,而不是C。由于这是为您编译的,因此我们知道您正在使用C ++编译器。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句