的問題是使10個整數數組這很好參考在C數組++
int array[10];
現在的問題是
如何使reference
到我上面聲明的array
?
我想這
int &ra = a;
但它給我的錯誤... 請提供有關此錯誤的詳細信息,以及如何使一個array
的reference
。
的問題是使10個整數數組這很好參考在C數組++
int array[10];
現在的問題是
如何使reference
到我上面聲明的array
?
我想這
int &ra = a;
但它給我的錯誤... 請提供有關此錯誤的詳細信息,以及如何使一個array
的reference
。
int (&ra)[10] = a;
Alterantively一點點有用的,你可以使用一個typedef這個分成的類型「的10個整數數組」並在那裏有一個參考,如:
typedef int int10[10];
int10& my_ref = a;
您的問題int &ra = a;
是它告訴編譯器創建一個int
類型的引用,它指向一個array of 10 ints
......它們只是不同的東西。考慮到sizeof(int)
是十個int
的數組的十分之一大小 - 它們佔用不同的內存量。你所要求的引用類型可以通過特定字符來滿足,如int& ra = a[0];
。
我感到有點困惑,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";
}
這是的大小10的整數數組的引用:
int (&ra)[10];
所以
int (&ra)[10] = a;
上一個int&ra = a ...中的錯誤是什麼? – Omkant
這是對int的引用,你需要對數組的引用。 – john
@好吧,'int&ra'是初學者對'int'的引用。即使多年後,我仍然發現一些C聲明的語法混淆。我會用'std :: array
到數組的引用將具有類型int (&a)[10]
。
int array[10];
int (&a)[10] = array;
有時可能把事情簡單化使用typedef
typedef int (&ArrayRef)[10];
...
ArrayRef a = array;
這是否簡化了一切? typedef與原始引用聲明一樣複雜。 – john
是的,但是如果你頻繁地將這個數組引用傳遞給函數,它可能更容易和更明確地爲函數參數使用類型別名。與使用typedef作爲函數指針相比,這並不是那麼好。 –
對數組使用typedef可能更加方便(就像在Tony的答案中一樣)。 –
用於typedef。 – john
@Toni D:這只是我的答案的一半...那我得到的錯誤..請澄清我 – Omkant
後來編輯罰款...但是當我嘗試int&ra = a它給我編譯錯誤:非常量int&不能分配給rvlaue ....我在問這是什麼 – Omkant