c++ - 它是通过指针传递的吗?

标签 c++ pass-by-reference pass-by-value

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::stringstd::vector<char>反而。

关于c++ - 它是通过指针传递的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8435784/

相关文章:

简化命名类型的 C++ 语言功能(特别是在函数声明中)

c++ - 在编译时检测模板存在

c++ - 一起使用 Boost::Asio 套接字异步和同步操作

java - Java 是 "pass-by-reference"还是 "pass-by-value"?

java - 不可变和按值传递

c++ - 作为 `const&`轻量级对象传递

c++ - 如何在类中初始化数组?

C++:引用和指针问题(关于 OpenGL 的示例)

c# - 结构是 'pass-by-value' 吗?

java - 引用资料和选角