使用指针传递引用和值

The*_*uzz 13 c++ parameter-passing pass-by-reference pass-by-value

我不明白为什么传递指向函数的指针不会改变传入的数据.如果函数proto看起来像这样:

void func( int *p ); 
Run Code Online (Sandbox Code Playgroud)

和func分配内存到p,为什么不能在函数外部使用?我以为指针是地址?

Oli*_*rth 17

虽然这样的事情符合你的期望:

void func(int *p)
{
    *p = 1;
}

int a = 2;
func(&a);
// a is now 1
Run Code Online (Sandbox Code Playgroud)

这不

void func(int *p)
{
    p = new int;
}

int *p = NULL;
func(p);
// p is still NULL
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,该函数都使用原始指针的副本.不同之处在于,在第一个示例中,您正在尝试操作基础整数,因为您拥有其地址.在第二个示例中,您直接操作指针,这些更改仅适用于副本.

有各种解决方案; 这取决于你想做什么.


Nik*_*sov 5

C和C++中的参数按值传递.这意味着,如果自变量的类型是一个指向int,则该函数接收拷贝的实际指针参数的,同时仍然能够以改变int指向.

  • @FredOverflow在这种情况下引用是通过值传递的,对吗? (4认同)