簡體   English   中英

C ++對數組的引用

[英]c++ reference to array

我無法在myfunc()創建對unsigned char數組z的引用。 我嘗試了幾種方法,但無法弄清楚。 這是我最近的嘗試:

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]);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);

我應該如何引用自身的數組(而不是引用數組?)?

myfunc(y, z[2]);

表達式z[2]的類型為unsigned char (並且指向數組末尾的元素,因此它是未定義的行為)。 您想做:

myfunc(y, z);

調用應為: int x = myfunc(y, z);

這是因為z表示unsigned char [2]z[2]表示char類型。 z[2]訪問數組。

我對您要做什么感到有些困惑。 恕我直言,您的簽名應該只是int myfunc (int &y, unsigned char z[2])

數組不會“按值”傳遞(如果您想這樣做,那么使用向量是最簡單的方法),並且默認值可使get_mac函數(我認為應該是myfunc )按需要工作(除非我誤解了你的願望)。

簽名int myfunc (int &y, unsigned char (&z)[2]) 建議您可能要在調用方中更改z本身的值(不僅是z元素),但是即使調用方也無法做到這一點( !),如果嘗試,將會收到錯誤消息。 如果需要,請使用實際的指針。

存在用於使用語法在你的例子,這是為了執行聲明數組大小通過引用傳遞的陣列的合法使用。 但是,如果您只是在學習,我認為您不必為此擔心。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM