如何在c ++中通过引用传递数组元素?

时间:2016-01-26 09:07:45

标签: c++

是否可以通过引用传递单个数组元素(以便传入的参数被修改)? 例如,假设这是一个主要部分:

int ar[5] = {1,2,3,4,5};
test(&ar[2]);

现在这是函数定义:

void test(int &p)
{
    p = p + 10;
    return;
}

上述代码导致编译错误。

2 个答案:

答案 0 :(得分:10)

&ar[2]获取数组中第3个位置的元素的地址。因此,您尝试将int*传递给期望int&的函数。通常,您不需要对表达式执行任何操作以使其被视为引用,因为引用只是存在于其他位置的某个对象的另一个名称。 (这会引起混淆,因为它有时似乎表现就像一个指针)。

只需传递ar[2]对象本身:

test(ar[2]);

如果你把数组放在一边片刻,并且只使用int,也许会更清楚。

void test (int &p);
// ...
int a = 54321;
test(a); // just pass a, not a pointer to a

答案 1 :(得分:2)

只是为BobTFish的答案提供替代方案。如果你需要传递一个地址,那么你的函数定义需要接受一个指针作为参数。

void test(int *arg);
// ...
int arg = 1234;
test(&arg);

并使用数组元素的地址执行以下操作:

void test(int *arg);
// ...
int arg[0] = 1234;
test(&arg[0]);

有些人在数组元素中添加括号:&(arg[0]),这在怀疑时很好,但[]运算符的优先级高于&运算符