[英]reference to an array in c++
問題是制作一個由 10 個整數組成的數組,這很好
int array[10];
現在的問題是
如何reference
我在上面聲明的array
?
我試過這個
int &ra = a;
但這給了我錯誤...請向我提供有關此錯誤的詳細信息以及如何reference
array
。
int (&ra)[10] = a;
或者,您可以使用typedef將其分為“ 10個整數數組”的類型,並對其進行引用,如下所示:
typedef int int10[10];
int10& my_ref = a;
您的int &ra = a;
它告訴編譯器創建一個int
類型的引用,該引用引用一個array of 10 ints
的array of 10 ints
...它們不是同一回事。 考慮sizeof(int)
是十個int
s數組大小的十分之一-它們占用不同的內存量。 您所要求的引用類型可以由特定字符滿足,例如int& ra = a[0];
。
我欣賞int* p = a;
有點令人困惑int* p = a;
允許-為了與類型安全性較低的C兼容,可以使用指針訪問單個元素或數組,盡管不保留有關數組大小的任何信息。 這就是選擇引用的原因之一-它們比指針增加了一些安全性和功能。
有關增加功能的示例,您可以采用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";
}
對array的引用將具有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;
您可以 typedef 數組類型(類型不應不完整),如下所示:
#define LEN 10
typedef int (array)[LEN];
int main(void)
{
array arr = {1, 2, 3, 4, 5}; //define int arr[10] = {1, 2, 3, 4, 5};
array arr2; //declare int arr[10];
array *arrptr = &arr; // pointer to array: int (*arrptr)[10] = &arr;
array &&arrvef; // declare rvalue reference to array of 10 ints
array &ref = arr; // define reference to arr: int (&ref)[10] = arr;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.