它是通过指针?

Ter*_* Li 3 c++ pass-by-reference pass-by-value

void func(char* buf) { buf++;}
Run Code Online (Sandbox Code Playgroud)

我应该通过指针调用它还是只传递值(值为指针类型)?在这种情况下,传入的原始指针会被改变吗?

par*_*mar 5

这是值得传递的.

void func( char * b )
{
    b = new char[4];
}

int main()
{
    char* buf = 0;
    func( buf );
    delete buf;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

调用后buf仍为0 func,新内存将泄漏.

按值传递指针时,可以更改指针指向的内容而不是指针本身.

做上述事情的正确方法是

替代方案1

void func( char *& b )
{
    b = new char[4];
}

int main()
{
    char* buf = 0;
    func( buf );
    delete buf;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

请注意,指针是通过引用而不是值传递的.

替代方案2

另一种方法是将指针传递给指针

void func( char ** b )
{
    *b = new char[4];
}

int main()
{
    char* buf = 0;
    func( &buf );
    delete buf;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

请注意我并不以任何方式提倡使用如上所述的裸指针和手动内存管理,而只是说明传递指针.C++的方式是使用std::stringstd::vector<char>代替.

  • @Terry ...请看看我更新的答案 (3认同)