1.以下標引用的方式訪問陣列
在使用陣列的場合中,我們常見的一種訪問方法是使用下標訪問陣列元素,如:array[2] = 1
,此語句是將該陣列的第三個元素賦值為1.[ ]符號中的數字可以認為是在陣列基位址上的偏移量,可以通過改變這個偏移量來訪問整個陣列。
2.以指標訪問的方式訪問陣列
除了使用偏移量的方法,我們還可以使用指標的方法來訪問陣列,即間接引用的方式。如:*(array+2) = 1
,同上面的**一樣,也是對該陣列的第三個元素進行賦值。
3.下標引用和指標訪問的執行效率問題
對於這兩種不同的訪問陣列的方式,它們的執行效率也不同,在這裡先給出結論:指標訪問的效率 >= 下標引用的效率。接下來我們來說說,為什麼使用指標進行間接訪問的效率會優於小標引用的效率。
int array[10]
;for
(int i =
0;i <
10;i++
)
在這裡我們還是假設編譯器中int型別佔4個位元組,在執行array[i] = 0
時,編譯器會將其轉化為類似*(array + (i*4)) = 0
形式。在整個執行10次的迴圈中,意味著也進行了10次乘法運算操作和10次加法運算操作。
int array[10]
;for
(int
*ptr = array; ptr < array+
10; ptr++
)
這裡是將指標一開始指向陣列首位址,然後每次向後移動乙個陣列元素,這裡是每次移動4個位元組,即每次對指標位址+4。在整個過程中只進行了10次加法運算。同上對比可得,對於陣列操作來說,指標訪問的效率是優於下標引用的。
4.下標引用和指標訪問的優先順序問題
關於這個問題,筆者還是先給出結論,再舉例進行闡述。
結論:下標引用優先順序 > 指標訪問優先順序。
假設我們現在有以下兩個陣列的宣告:
int
*array1[10]
;int
(*array2)[10
];
關於上述宣告,乍一看很容易混淆,但其實這只是乙個關於結合優先順序的問題。在看這些宣告時,需要記住下標優先順序高於指標*,並且如果出現了( ),那麼它的優先順序一定是最高的。
總結:關於陣列的下標引用和指標訪問,可以根據需要效率和可讀性選擇不同的方式,使用指標效率固然會得到提高,但在複雜場景中,會犧牲**可讀性。關於宣告指標陣列還是陣列指標,可以根據*和 的優先順序進行需求組合。
多維陣列中的下標引用如何工作的?
如果要標示乙個多維陣列的某個元素,必須按照與陣列宣告時相同的順序為每一維都提供乙個下標,而且每個下標都單獨位於一對方括號內 int matrix 3 10 表示式 matrix 1 5 訪問這個元素 但是下標引用實際上只是間接訪問表示式的一種偽裝形式,在多維陣列中也是如此。表示式 matrix它是 ...
C 中陣列的下標和指標
我們知道,當我們在表示式中使用陣列名時,實際上使用的是指向陣列首元素的指標,實際上使用陣列名參加下標運算時,本質上參加運算的仍然是指向陣列首元素的指標 int ia int i ia 2 ia 2 的運算過程實際是這樣的 ia 2 實際上只要指標指向陣列元素,我們就可以對它進行下標操作 int p ...
C語言 陣列指標和通過指標引用陣列元素的方法總結
1.陣列指標 即指向陣列的指標 那麼,如何宣告乙個陣列指標呢?int p 10 括號是必須寫的,不然就是指標陣列 10是陣列的大小 拓展 有指標型別元素的陣列稱為指標陣列。2.通過指標引用陣列元素的基本方法 1 小標法 a i 2 指標法 a i 或 p i 或 p i 其中,a是陣列名,p a,即...