传递指针参数,在C++中传递值?因为我看到指针的任何更改都不会反映在方法之外.我通过解除引用指针所做的更改会被反映出来.
在这种情况下,使用指针指向函数的参数是否可以接受/标准过程来修改函数中的指针值?
我有一个问题,将数组传递给函数,然后修改它.例如:
void foo(int ** a) {
int * b = new int[3]
//Initialize b, i.e b = {3, 2, 1}
a = &b;
//*a = {3, 2, 1}
}
int * c = new int[3]
//Initialize c; c = {1, 2, 3}
foo(&c);
// c is still {1, 2, 3}. Why?
Run Code Online (Sandbox Code Playgroud)
我不确定为什么c不指向同一个数组b.
我确定这个问题已经在某些地方得到了解答,请将它链接到它,如果有的话,但我很难找到这个确切问题的答案.有许多非常接近.以下是我已经阅读过的一些内容并不能完全回答我的问题:
使用指针传递引用和值 在C++中通过引用传递 指针的原因?对作为函数参数传递的指针使用delete
以下是该情况的基本概述,试图使其非常接近我的实际用法:
void func (vector<int>* foo) {
int bar = foo->at(0);
// transform bar
foo->at(0) = bar;
// Should I delete foo?
delete foo;
}
int main() {
vector<int> data (4, 0);
data.at(0) = 5;
for (int i = 0; i > 10; i++) {
func(&data);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:上面的for循环应该是这样的:
for (int i = 0; i < 10; i++) {
Run Code Online (Sandbox Code Playgroud)
因此,正如您所看到的,我创建了一个名为data的向量,然后将数据引用传递给该函数.该函数通过引用从数据中获取值,对其进行转换,然后通过引用再次将新值保存回数据.
在此特定方案中,此函数是唯一接收此数据的函数,但它会被重复调用,并且每次都会将引用传递给相同的数据.
我的主要问题是,我应该在该函数的末尾删除foo吗?此外,如果我还有一个额外的功能也传递了对数据的引用,那会改变答案吗?
我已经阅读了其他一些问题,建议小心删除函数中的指针,但它们都与首先声明为指针的数据类型有关.我首先没有声明一个指针或引用,只是创建一个引用作为函数的参数(我想?).
我之所以这样问的原因是我的程序有一些严重的内存泄漏.我已经做了一些研究,并阅读了许多关于指针相关的内存泄漏,我发现这可能是它的一个来源
我试过在一个这样的函数的末尾添加一个"删除",到目前为止一切似乎都很好......但是我不想添加一大堆删除,然后一段时间在路上发现它是一个非常糟糕的主意:D
提前干杯,皮特