c ++对数组的引用

时间:2012-05-03 19:48:32

标签: c++ char pass-by-reference

我无法在unsigned char中创建对z数组myfunc()的引用。我已经尝试了几种方法但是无法弄明白。这是我最近的尝试:

int myfunc (int &y, unsigned char (&z)[2]);

int main(int argc, char *argv[]) {
 int y = 1;
 unsigned char z[2];

 int x = myfunc(y, z[2]);
}

int myfunc(int &y, unsigned char (&z)[2]) {
 y = 123;
 z[0] = foo;
 z[1] = bar;
 return 456;
}

我收到以下错误:

error: in passing argument 2 of ‘int myfunc(int&, unsigned char (&)[2])’

对于第int myfunc (int &y, unsigned char (&z)[2]);

error: invalid initialization of reference of type ‘unsigned char (&)[2]’ from expression of type ‘unsigned char’

对于第int x = myfunc(y, x);

我应该如何引用它自己的数组(而不是引用数组?)?

3 个答案:

答案 0 :(得分:10)

myfunc(y, z[2]);

表达式z[2]的类型为unsigned char(并且指的是超出数组末尾的元素,因此它是未定义的行为)。你想做的事:

myfunc(y, z);

答案 1 :(得分:2)

应致电:int x = myfunc(y, z);

这是因为z代表unsigned char [2]z[2]代表类型char。同样z[2]访问数组越界。

答案 2 :(得分:1)

我对你要做的事感到有些困惑。恕我直言,你的签名应该是int myfunc (int &y, unsigned char z[2])

数组不会“按值”传递(如果你想这样做,那么使用向量是最简单的方法),默认情况下会产生get_mac函数(我认为它应该是myfunc)按照需要工作(除非我误解了你的愿望)。

签名int myfunc (int &y, unsigned char (&z)[2]) 建议您可能希望在调用者中更改z本身的值(不仅仅是z的元素),甚至调用者不能这样做(!),如果你尝试,你会得到一个错误。如果需要,请使用实际指针。

是使用示例中的语法通过引用传递数组的合法用法,即强制声明的数组大小。但如果你只是在学习,我认为你还不用担心这个问题。