當前位置:首頁 » 密碼管理 » 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元素整型數組。

熱點內容
的世界java下載 發布:2024-07-27 13:43:55 瀏覽:493
動圖壓縮軟體 發布:2024-07-27 13:41:22 瀏覽:65
葯房電腦虛擬伺服器 發布:2024-07-27 13:32:54 瀏覽:649
消費券腳本 發布:2024-07-27 13:23:13 瀏覽:777
ip電腦伺服器未響應如何處理 發布:2024-07-27 13:22:53 瀏覽:382
m6傳祺2021款買哪個配置 發布:2024-07-27 13:22:04 瀏覽:462
emojijava 發布:2024-07-27 12:57:07 瀏覽:157
編程培訓福州 發布:2024-07-27 12:28:06 瀏覽:876
哈弗h6女生適合哪個配置 發布:2024-07-27 12:10:52 瀏覽:954
memcached啟動腳本 發布:2024-07-27 11:55:41 瀏覽:558