c – 是否通过指针?
作者:互联网
void func(char* buf) { buf++;}
我应该通过指针调用它还是只传递值(值为指针类型)?在这种情况下,传入的原始指针会被改变吗?
解决方法:
这是值得传递的.
void func( char * b )
{
b = new char[4];
}
int main()
{
char* buf = 0;
func( buf );
delete buf;
return 0;
}
调用func后,buf仍为0,新内存将泄漏.
按值传递指针时,可以更改指针指向的内容而不是指针本身.
做上述事情的正确方法是
替代方案1
void func( char *& b )
{
b = new char[4];
}
int main()
{
char* buf = 0;
func( buf );
delete buf;
return 0;
}
请注意,指针是通过引用而不是值传递的.
替代方案2
另一种方法是将指针传递给指针
void func( char ** b )
{
*b = new char[4];
}
int main()
{
char* buf = 0;
func( &buf );
delete buf;
return 0;
}
请注意我并不以任何方式提倡使用如上所述的裸指针和手动内存管理,而只是说明传递指针. C方式是使用std :: string或std :: vector< char>代替.
标签:c,pass-by-reference,pass-by-value 来源: https://codeday.me/bug/20190902/1792656.html