c ++中的指针传递值/引用

时间:2012-01-17 15:49:28

标签: c++ pointers

就像简单变量一样,指针变量也可以用作函数中的Value参数或Reference参数.....但是当使用指针变量时2保持内存位置或内存位置的内容那么它会有什么不同呢如果指针变量用作值或参考参数????

,则生成

4 个答案:

答案 0 :(得分:9)

如果函数A通过引用另一个函数B传递指针P,那么B可以使P指向存储器中的不同位置,并且A将看到该改变。另一方面,如果A通过P值,则B只能改变P指向的存储器的内容。 A会看到对该内存的更改,但是当B返回时,P将永远不会指向内存中的不同的点。

答案 1 :(得分:5)

区别如下:

  1. 如果您通过值传递指针,则被调用者对指针所做的任何更改都不会对调用者可见;
  2. 如果您通过引用传递指针,则调用者可以看到被调用者所做的指针的任何更改
  3. 在这里,我说的是指针本身的值(即它指向的位置),而不是指向对象的值。

答案 2 :(得分:4)

小例子说明需要通过引用传递指针

//pass by value
void InitString1( char* buf )
{
    buf = new char[5];
}

//pass by reference
void InitString2( char*& buf )
{
    buf = new char[5];
}

int main()
{
    char* buffer = 0;
    InitString1( buffer);
    //buffer is still null and memory leaks
    delete [] buffer;

    InitString2( buffer );
    //buffer will be assigned correctly
    delete [] buffer;

    return 0;
}

答案 3 :(得分:0)

#include <iostream>
void passByValue(int* p) {
  p = new int;
}
void passByReference(int*& p) {
  p = new int;
}
int main() {
  int *p1 = 0;
  int *p2 = 0;
  passByValue(p1);
  passByReference(p2);
  std::cout << p1 << "\n";
  std::cout << p2 << "\n";
}

考虑上述计划。第一行将始终打印为零,这意味着调用mainp1的{​​{1}}变量更新。相比之下,通过调用passByValue更新了p2