c++ - 使用指针传递引用和值

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

我不明白为什么将指针传递给函数并不会改变传入的数据。如果函数原型(prototype)看起来像这样:

void func( int *p ); 

而func给p分配了内存,为什么不能在函数外使用呢?我以为指针是地址?

最佳答案

虽然这样的事情符合您的预期:

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

int a = 2;
func(&a);
// a is now 1

这不是

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

int *p = NULL;
func(p);
// p is still NULL

在这两种情况下,函数都使用原始指针的拷贝。不同之处在于,在第一个示例中,您尝试操作底层整数,因为您有它的地址,所以它起作用了。在第二个示例中,您直接操作指针,这些更改仅适用于 拷贝

对此有多种解决方案;这取决于你想做什么。

关于c++ - 使用指针传递引用和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4776010/

相关文章:

c++ - directx 相机位置让我感到困惑

c++ - 在 C++ 中将短符号签名为字节

c++ - QAbstractProxyModel 不更新 dataChanged() 信号

coldfusion - 我可以在 ColdFusion 中通过引用传递一个简单的值吗?

javascript - JavaScript 是按引用传递还是按值传递语言?

c++ - vswprintf_l vswprintf 的扩展区域设置版本?

c++ - 将参数作为 std::string 或 const std::string& 传递?

python - 如何在 python 中检查指定函数的至少一个默认参数

c - 如何在 C 函数中传递二维数组(矩阵)?

c++ - 从字符串转换为 char* - 传递函数指针