1

我无法unsigned charz. 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);

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

4

3 回答 3

10
myfunc(y, z[2]);

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

myfunc(y, z);
于 2012-05-03T19:50:55.173 回答
2

调用应该是:int x = myfunc(y, z);

这是因为z代表 anunsigned char [2]z[2]代表 type char。还z[2]可以越界访问数组。

于 2012-05-03T19:52:16.497 回答
1

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

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

签名int myfunc (int &y, unsigned char (&z)[2]) 表明您可能希望z在调用者中更改其自身的值(不仅仅是 的元素z),但即使调用者也不能这样做(!),如果您尝试,您会收到错误消息。如果需要,请使用实际指针。

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

于 2012-05-04T01:49:04.837 回答