2012-10-26 113 views
1

的問題是使10個整數數組這很好參考在C數組++

int array[10]; 

現在的問題是

如何使reference到我上面聲明的array

我想這

int &ra = a; 

但它給我的錯誤... 請提供有關此錯誤的詳細信息,以及如何使一個arrayreference

回答

6
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"; 
} 
+0

用於typedef。 – john

+0

@Toni D:這只是我的答案的一半...那我得到的錯誤..請澄清我 – Omkant

+0

後來編輯罰款...但是當我嘗試int&ra = a它給我編譯錯誤:非常量int&不能分配給rvlaue ....我在問這是什麼 – Omkant

1

這是的大小10的整數數組的引用:

int (&ra)[10]; 

所以

int (&ra)[10] = a; 
+0

上一個int&ra = a ...中的錯誤是什麼? – Omkant

+0

這是對int的引用,你需要對數組的引用。 – john

+0

@好吧,'int&ra'是初學者對'int'的引用。即使多年後,我仍然發現一些C聲明的語法混淆。我會用'std :: array '或'std :: tr1 :: array '代替。 – juanchopanza

3

到數組的引用將具有類型int (&a)[10]

int array[10]; 
int (&a)[10] = array; 

有時可能把事情簡單化使用typedef

typedef int (&ArrayRef)[10]; 
... 
ArrayRef a = array; 
+0

這是否簡化了一切? typedef與原始引用聲明一樣複雜。 – john

+0

是的,但是如果你頻繁地將這個數組引用傳遞給函數,它可能更容易和更明確地爲函數參數使用類型別名。與使用typedef作爲函數指針相比​​,這並不是那麼好。 –

+1

對數組使用typedef可能更加方便(就像在Tony的答案中一樣)。 –