C語言 指標篇 三 陣列的下標引用和指標訪問

2021-09-29 20:33:39 字數 1475 閱讀 5923

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,即...