在c 中使用指向陣列的引用

2021-05-28 07:48:13 字數 2046 閱讀 8790

剛開始接觸這個問題的時候確實是有點懵,不過看了c++ primer後發現這個其實很簡單:

intn3[3] = ;

int(&rn3)[3] = n3;// a reference to an array of 3 ints

沒錯,確實是有那麼點怪異!

那麼,typedef 一下也許就好理解多了:

intn3[3] = ;

typedefintint3[3];

int3& rn3 = n3;// a reference to an array of 3 ints

先看看指標是怎麼寫的:

voidgetint3_example1(int* pn3)

不過,誰能保證pn3的大小就一定是3個int呢?再試試看:

voidgetint3_example2(intn3[3])

當然這樣只不過是讓它看起來正確罷了, 實際上這種寫法和第一種沒啥區別!試試看:

intloc[2];// local array of 2 integers

getint3_example2(loc);// no compile error, but access violation!

果然是不行的有木有!

這裡還要注意的是,如果改用typedef,會出現乙個需要注意的問題:

voidgetint3_example3(int3 n3)

;

intn3size  =sizeof(n3);// n3size == 4

intlocsize =sizeof(loc);// locsize == 12, see?

}

所以說,最終還是要用引用才能達到限制大小的目的:

voidgetint3_example4(int(&n3)[3])

或者還是用 typedef 讓它看起來舒服些?

voidgetint3_example5(int3& n3)

好了,終於到重點,先來看看用typedef是怎麼寫的:

int3& getint3_example6()

;

returnn3;

}

很好,那麼如果說不用typedef呢?

好吧,我不得不google之,按照這個部落格的解釋,原來又是乙個怪異的寫法:

int(&getint3_example7()) [3]

;

returnn3;

}

真是會讓人暈倒啊有木有!

在c 中使用指向陣列的引用

今天在工作中需要在乙個把乙個class內部的某個陣列成員expose 是的,有時候不這樣做只是徒增麻煩 給外面使用,於是自然而然就想應該是返回乙個指向這個陣列的引用會好些。指向陣列的引用這種用法雖然不是很多見,但我還是寫過不少次了,為了方便我常常會用typedef陣列型別來實現,不過今天我突然想到乙...

在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的列表物件實際上是乙個動態指標陣列。當列表中沒有空間儲存新的元素時,列表會動態地改變其大小,以容納新的元素。每次改變大小時,它都會...