小記 陣列下標索引的用法

2021-08-19 01:58:47 字數 839 閱讀 1903

最近在逛知乎的時候,看到了一種比較特別的陣列下標索引的方式,受到一些啟發,所以簡單的記錄一下。

眾所周知對於乙個整型陣列s,訪問其內部的元素有幾種方式。比如我們想要訪問其3個元素可以是以下幾種方式:

1. int s[2];

2. int *(s + 2);

3. int 2[s];

是不是很奇怪,我剛開始看到的時候也很奇怪,但是只要仔細想想「[「以及」]」的意義就可以明白了。

s[2]的本質是取乙個位址,即*(s + 2)也就是我們的第二種表達方式,對於2[s]的表達方式來講,其本質是*(2 + s)也就是說其實他們取到的是同乙個位址!也就不難明白為什麼2[s] == s[2]了。

也許這時候有人會說,這種方式沒有實際用處!確實,如果它只是另外一種下標表示方法的話,除了一點炫技的用處外沒什麼大不了的。但是,我要說的是這種用法有乙個很大的用處,那就是判斷物件s[2]中的s是否是原生陣列,還是乙個過載了""的物件。其實想想這確實是乙個非常簡單的方法!我們只需要進行如下判斷即可得到我們的結果:

if(s[2] == 2[s])

cout << "s是原生陣列!" << endl;

else

cout << "s不是原生陣列!" << endl;

這個結果是顯而易見的,因為對於過載了""的類來說,比如vector,它的s[2]和2[s]顯然是不一樣的。對於vector來說s[2] = *(elems + 2),其中elems為其儲存元素的資料成員的首位址,而2[s] = *(2 + s),這裡的s就是物件的首位址,顯然他們是不同的位址!

C 學習小記陣列和指標

int arr 2 3 cout 二維陣列占用記憶體空間為 sizeof arr 二維陣列第一行占用記憶體空間為 sizeof arr 0 二維陣列第乙個元素占用記憶體空間為 sizeof arr 0 0 二維陣列的行數為 sizeof arr sizeof arr 0 二維陣列的列數為 sizeo...

C語言題目小記 陣列迴圈右移

題目描述 編制程式,輸入整型變數n和m,建立乙個長度為n的一維整型陣列並輸入所有陣列元素。將陣列中的元素迴圈右移m個位置後按順序輸出該陣列所有元素。例如 原陣列為 1 2 3 4 5 迴圈右移3個位置後應該變為 3 4 5 1 2 注意 m的值如果大於等於5該如何處理 輸入描述輸入第1行給出正整數n...

在迴圈中獲取索引 陣列下標

有人知道如何獲取列表的索引值嗎 ints 8,23,45,12,78 當我迴圈這個列表時如何獲得它的索引下標?如果像c或者php那樣加入乙個狀態變數那就太不pythonic了.最好的選擇就是用內建函式enumerate for i in range 0,len list print i list i...