是否可以通过引用传递单个数组元素(以便传入的参数被修改)? 例如,假设这是一个主要部分:
int ar[5] = {1,2,3,4,5};
test(&ar[2]);
现在这是函数定义:
void test(int &p)
{
p = p + 10;
return;
}
上述代码导致编译错误。
答案 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])
,这在怀疑时很好,但[]
运算符的优先级高于&
运算符