當前位置:首頁 » 密碼管理 » c訪問數組元素

c訪問數組元素

發布時間: 2024-02-24 03:07:41

c語言中用指針和用下標訪問數組元素的本質區別

兩者意思一樣,但是編譯器處理起來不見得一樣。就像樓上的例子a[2]跟*(a+2)是一個意思。但是對於編譯器來說a[2]是一種固定的寫法,因此對於地址偏移什麼的有固定的處理方式,而*(a+2)在語法上應當分解為先算a+2再取值,如果編譯器不優化,完全按照這種定義去編譯的話,那麼就會有先算出a+2這個地址這一步,因此效率要低些。至於編譯優化能不能使兩者一致,那就很難說了。
比如我編了這樣一個程序
int
a[100];
int
b;
int
i,j,k;
for(i=0;i<1000000;i++){
for(j=0;j<100;j++){
for(k=0;k<100;k++){
b=a[0];
}
}
}
和把b=a[0]換成b=*(a)所耗時間一樣。而分別換成b=a[k]和b=*(a+k)後者所耗時間明顯增加很多,前者也有所增加,但比較少。編譯器優化不能用這個語句測試,因為整個會被優化掉。

② C語言里應該怎麼來訪問數組中的元素

用數組下標來訪問
例如,定義一個數組:int a[5]={1,2,3,4,5};
a[0]=1;
a[1]=2;
a[2]=3;
a[3]=4;
a[4]=5;

③ C語言中為什麼要使用指針訪問數組元素

用指針有一些好處:可以再指針上直接進行計算
比如加減指針。
另外當數組作為
參數傳遞
到函數中的時候,用指針是很方便的。
其實數組的名字就是一個指針。
有一本經典的書

C專家編程

可以幫助理解這個問題。這種基礎問題是非常重要的。

④ 在C語言中,用下標如何訪問數組元素

.以下標引用的方式訪問數組

在使用數組的場合中,我們常見的一種訪問方法是使用下標訪問數組元素,如:array[2] = 1,此語句是將該數組的第三個元素賦值為1.[ ]符號中的數字可以認為是在數組基地址上的偏移量,可以通過改變這個偏移量來訪問整個數組。

2.以指針訪問的方式訪問數組

除了使用偏移量的方法,我們還可以使用指針的方法來訪問數組,即間接引用的方式。如:*(array+2) = 1,同上面的代碼一樣,也是對該數組的第三個元素進行賦值。

3.下標引用和指針訪問的執行效率問題

對於這兩灶螞種不同的訪問數組的方式,它們的執行效率也不同,在這里先給出結論:指針訪問的效率 >= 下標引用的效率。接下來我們來說說,為什麼使用指針進行間接訪問的效率會優於小標引用的效率。

下標引用的效率

現在假設有如下代碼,執行對整個數組的初始化過程:

int array[10];

for(int i = 0;i < 10;i++)

{

array[i] = 0;

}

在這里我們還是假設編譯器中int類型佔4個位元組,在執行array[i] = 0時,編譯器會將其轉化為類似*(array + (i*4)) = 0形式。在整個執行10次的循環中,意味著也進行了10次乘法運算操作和10次加法運算操作。李腔

指針訪問的效率

假設有如下代碼,執行對整個數組的初始化過程:

int array[10];

for(int *ptr = array; ptr < array+10; ptr++)

{

*ptr = 0;

}

這里是將指針一開始指向數組首地址,然後每次向後移動一個數組元素,這里是每次移動4個位元組,即每次對指針地址+4。在整個過程中只進行了10次加法運算。同上對比可得,對於數組操作來說,指針訪問的效率是優於下標引用的。

4.下標引用和指針訪問的優先順序問題

關於這個問題,筆者還是先給出結論,再舉例進行闡述。

結論:下標引用優先順序 > 指針訪問優先順序。

假設我們現在有以下兩隱擾埋個數組的聲明:

int *array1[10];

int (*array2)[10];

關於上述聲明,乍一看很容易混淆,但其實這只是一個關於結合優先順序的問題。在看這些聲明時,需要記住下標優先順序高於指針*,並且如果出現了( ),那麼它的優先順序一定是最高的。

int *array1[10]

在*和[ ]同時出現的時候,我們先結合優先順序高的[ ]來看,即它先聲明了一個含有10個元素的數組array1,然後將剩下的int *組合,可以知道這個數組裡面的每個元素,都是一個指向整型類型的指針變數。也就是說,這是一個含有10個指針變數的指針數組。

int (*array2)[10]

這里的聲明中出現了( ),由於( )的優先順序最高,所以我們先看(*array2),即array2是一個指向某種類型的指針變數。再結合剩下的int [10],可以知道這個指針變數指向的數據類型是含有10個元素的整型數組。也就是說,這是一個數組指針,指向一個10元素整型數組。

熱點內容
安卓手機掃碼軟體哪個好用 發布:2024-06-16 19:45:29 瀏覽:624
linux版權 發布:2024-06-16 19:44:18 瀏覽:216
蜂群演算法matlab 發布:2024-06-16 19:34:58 瀏覽:840
求生之路2怎麼裝伺服器 發布:2024-06-16 19:24:47 瀏覽:60
雲伺服器域控制器搭建方案 發布:2024-06-16 19:19:34 瀏覽:569
筆記本電腦能聯伺服器嗎 發布:2024-06-16 19:10:48 瀏覽:794
mysql開啟預編譯 發布:2024-06-16 19:07:58 瀏覽:977
雲伺服器公網ip怎麼高可用 發布:2024-06-16 19:00:37 瀏覽:437
pythonforrange列表 發布:2024-06-16 18:43:00 瀏覽:216
中國標准體重演算法 發布:2024-06-16 18:11:52 瀏覽:212