質問は、10 個の整数の配列を作成することです。これで問題ありません
int array[10];
今質問は
上で宣言しreference
たものを作る方法は?array
私はこれを試しました
int &ra = a;
しかし、それは私にエラーを与えています...このエラーの詳細reference
とarray
.
int (&ra)[10] = a;
または、次のように、typedef を使用して、これを「10 個の int の配列」の型に分離し、そこへの参照を持つことができます。
typedef int int10[10];
int10& my_ref = a;
あなたの問題は、を参照するint &ra = a;
型の参照を作成するようにコンパイラに指示することです...それらは同じものではありません。これは、10 の配列のサイズの 10 分の 1 であると考えてください。異なる量のメモリを占有します。参照の型で要求したことは、 のように特定の文字によって満たされる可能性があります。int
array of 10 ints
sizeof(int)
int
int& ra = a[0];
許可されているのは少し紛らわしいですint* p = a;
が、タイプセーフではないCとの互換性のために、配列サイズに関する情報を保持していないにもかかわらず、ポインターを使用して単一の要素または配列にアクセスできます。これが、参照を好む理由の 1 つです。参照は、ポインターよりも安全性と機能性を少し追加します。
増加した機能の例として、配列sizeof(my_ref)
内のバイト数( )を取得して取得できますが、ポインタのサイズ ( ) および. そして、関数内で使用するために配列次元を「キャプチャ」する次のようなコードを作成できます。int
10 * sizeof(int)
sizeof p
sizeof(int*)
sizeof *p == sizeof(int)
template <int N>
void f(int (&x)[N])
{
std::cout << "I know this array has " << N << " elements\n";
}
配列への参照は type になりint (&a)[10]
ます。
int array[10];
int (&a)[10] = array;
を使用して物事を少し単純化すると便利な場合がありますtypedef
typedef int (&ArrayRef)[10];
...
ArrayRef a = array;
これは、サイズ 10 の int の配列への参照です。
int (&ra)[10];
それで
int (&ra)[10] = a;