今天在工作中需要在乙個把乙個class內部的某個陣列成員expose(是的,有時候不這樣做只是徒增麻煩)給外面使用,於是自然而然就想應該是返回乙個指向這個陣列的引用會好些。指向陣列的引用這種用法雖然不是很多見,但我還是寫過不少次了,為了方便我常常會用typedef陣列型別來實現,不過今天我突然想到乙個問題,typedef 只是為了縮短敲的**長度和閱讀方便(當然有時候反而造成麻煩,但這不是重點),也就是說必然會有不需要 typedef 的寫法,那麼如果要寫乙個函式讓它返回乙個指向陣列的引用呢?究竟怎麼寫呢?這個問題我還真搞不定,還好google幫了我。
剛開始接觸這個問題的時候確實是有點懵,不過看了c++ primer後發現這個其實很簡單:
int
n3[3] = ;
int
(&rn3)[3] = n3;
// a reference to an array of 3 ints
沒錯,確實是有那麼點怪異!
那麼,typedef 一下也許就好理解多了:
int
n3[3] = ;
typedef
int
int3[3];
int3& rn3 = n3;
// a reference to an array of 3 ints
先看看指標是怎麼寫的:
void
getint3_example1(
int
* pn3)
不過,誰能保證pn3的大小就一定是3個int呢?再試試看:
void
getint3_example2(
int
n3[3])
當然這樣只不過是讓它看起來正確罷了, 實際上這種寫法和第一種沒啥區別!試試看:
int
loc[2];
// local array of 2 integers
getint3_example2(loc);
// no compile error, but access violation!
果然是不行的有木有!
這裡還要注意的是,如果改用typedef,會出現乙個需要注意的問題:
void
getint3_example3(int3 n3)
;
int
n3size =
sizeof
(n3);
// n3size == 4
int
locsize =
sizeof
(loc);
// locsize == 12, see?
}
所以說,最終還是要用引用才能達到限制大小的目的:
void
getint3_example4(
int
(&n3)[3])
或者還是用 typedef 讓它看起來舒服些?
void
getint3_example5(int3& n3)
好了,終於到重點,先來看看用typedef是怎麼寫的:
int3& getint3_example6()
;
return
n3;
}
很好,那麼如果說不用typedef呢?
好吧,我不得不google之,按照這個部落格的解釋,原來又是乙個怪異的寫法:
int
(&getint3_example7()) [3]
;
return
n3;
}
真是會讓人暈倒啊有木有!
在c 中使用指向陣列的引用
剛開始接觸這個問題的時候確實是有點懵,不過看了c primer後發現這個其實很簡單 intn3 3 int rn3 3 n3 a reference to an array of 3 ints 沒錯,確實是有那麼點怪異!那麼,typedef 一下也許就好理解多了 intn3 3 typedefint...
在DP中使用 滾動陣列
舉個簡單的例子 int d new int 100 d 0 1 d 1 1 for int i 2 i 100 i d i d i 1 d i 2 system.out.printf d d 99 上面這個迴圈d i 只需要解集中的前2個解d i 1 和d i 2 為了節約空間用滾動陣列的方法 in...
在NumPy中使用動態陣列
本文 numpy的ndarray陣列物件不能像list一樣動態地改變其大小,在做資料採集時很不方便。本文介紹如何通過np.frombuffer 實現動態陣列。python的列表物件實際上是乙個動態指標陣列。當列表中沒有空間儲存新的元素時,列表會動態地改變其大小,以容納新的元素。每次改變大小時,它都會...