c++ - 通过引用传递参数的指针算术

标签 c++ math pointers reference

正如标题所说,我需要修改通过引用传递的数组的第 ith 元素...

我有以下情况:

function1(Node *&array, int i) {
   array = array +i; // crash!!!
   // operation on array[i]
}

function2() {
   Node** array;
   // filling the array bla bla bla
   function1(*(array+0), i);
}

问题是:当我写array = array +i;时我做错了什么???

提前谢谢您!

最佳答案

我认为您的function1设计不正确。我不会尝试传递索引,而是简单地传递第 i 个元素。

function1(Node* array) {
    array->foo = ....
}

并这样调用它:

function1(array[i]);

您确实应该改掉使用 + 运算符作为数组索引方法的习惯。使用索引 [] 语法。我知道它们可以互换,但索引语法传达了意图。


在评论中,您指出索引实际上仅在 function1 内部已知,并且实际上不是问题中所述的参数。在这种情况下,将 Node** 传递给 function1

带有引用参数的代码会修改 array[0],因为这是您传入的 Node* 引用。但是您想要修改 i 第一个节点。如果您传递对 Node* 的引用,那么您只能修改该一个对象。为了执行您需要的操作,您需要传递 Node**

关于c++ - 通过引用传递参数的指针算术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10271613/

相关文章:

c++ - 三角形适合另一个三角形

c++ - 什么时候虚拟继承是个好主意?

java - 掷骰子的所有可能排列

c++ - 当放置并推送到智能指针 vector 时,原始指针是否会自动转换为智能指针?

c - 为什么即使在函数返回后对单个指针所做的更改仍然存在

c++ - 虚拟继承和可怕的钻石

python - 在 Python/OpenGL 中渲染数学符号?

python - 如何在 Y 时间内打印 X 数量的字符串?

C编程: Accessing pointers in a Union

c++ - 如何测试 std::error_code 不是错误?