1

内にunsigned char配列への参照を作成できません。私はいくつかの方法を試しましたが、それを理解することはできません。これは私の最近の試みです:zmyfunc()

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表すためです。また、範囲外の配列にアクセスします。unsigned char [2]z[2]charz[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]) 示唆していますが、呼び出し元でさえそれを行うことはできず(!)、試行するとエラーが発生します。それが必要な場合は、実際のポインターを使用してください。zz

例の構文を使用して参照によって配列を渡すための正当な使用法あります。これは、宣言された配列サイズを強制することです。しかし、あなたがただ学んでいるだけなら、私はあなたがこれについてまだ心配する必要はないと思います。

于 2012-05-04T01:49:04.837 に答える