簡體   English   中英

引用 c++ 中的數組

[英]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 intsarray 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.

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