指標和陣列 誰快

2022-07-29 18:06:13 字數 2481 閱讀 9851

譚浩強老師的《c語言程式設計》第二版,page211頁,有這樣一段話:

引用陣列元素可以用下標法,也可以用指標法,即通過指向陣列元素的指標找到所需的元素。使用指標法能使目標程式質量高(佔記憶體少,執行速度快)。

每次看到這個地方我都有點不解。後來在vc6.0環境下想了個實驗辦法,編寫乙個簡單的控制台程式,利用反彙編工具察看編譯後的**,發現好像不是這樣子的。從下面**看,好像利用指標訪問陣列元素要比下標法要慢。

**如下:

#include

void main()

;int *b=a;

printf("%d",1);

printf("%c",a[0]);

printf("%c",a[1]);                        *****************使用下標法

printf("%c",*b);                          *****************指標法

printf("%c",*(b+1));                   *****************這幾句話的彙編**

printf("%d",2);

}下面是反彙編的結果:

7:        printf("%c",a[0]);

0040b797   mov         ecx,dword ptr [ebp-2ch]

0040b79a   push        ecx          ****************這裡是下標法編譯後彙編語句

0040b79b   push        offset string "%c" (0042001c)

0040b7a0   call        printf (00401060)

0040b7a5   add         esp,8

8:        printf("%c",a[1]);

0040b7a8   mov         edx,dword ptr [ebp-28h]

0040b7ab   push        edx

0040b7ac   push        offset string "%c" (0042001c)

0040b7b1   call        printf (00401060)

0040b7b6   add         esp,8

9:        printf("%c",*b);

0040b7b9   mov         eax,dword ptr [ebp-30h]

0040b7bc   mov         ecx,dword ptr [eax]           

0040b7be   push        ecx    ****************這裡是指標法編譯後彙編語句

0040b7bf   push        offset string "%c" (0042001c)

0040b7c4   call        printf (00401060)

0040b7c9   add         esp,8

10:       printf("%c",*(b+1));

0040b7cc   mov         edx,dword ptr [ebp-30h]

0040b7cf   mov         eax,dword ptr [edx+4]

0040b7d2   push        eax

0040b7d3   push        offset string "%c" (0042001c)

0040b7d8   call        printf (00401060)

0040b7dd   add         esp,8

在上面程式中,利用下標訪問陣列的語句編譯後的彙編語句只有2句,而利用指標訪問陣列元素編譯後有3句,顯然是利用下標法進行訪問比較快些。所以對譚老師書上的那一段話有些質疑。特在此貼出來,希望有心達人能給我補充下,也給那些關注這些問題的喜歡c語言的新朋友提個問題。

下面用程式實驗

#include

#include

#include

#include

using namespace std;

int g_number = 0;

int main()

;int test_ok = 0;

int* aryend = &ary[arysize-1];   // 結束元素

指標陣列和陣列指標

有關陣列指標和指標陣列容易混淆,本文舉例說明兩者的區別,並加以分析。基本概念 指標 inta 1 int p a 指標的指標 int p2p p 簡單陣列 intb 20 指標陣列 int p 10 指標陣列,含有10個指標元素,即每乙個元素都是乙個指標 陣列指標 int p 10 這個指標用來指向...

指標陣列和陣列指標

理解這兩個概念,當從語言學的語法角度開始,定語 名詞,即 的 語句。指標陣列 指標的陣列 陣列指標 陣列的指標。一 指標陣列 元素為指標的陣列 顧名思義,就是說的首先是乙個陣列吧,然後陣列的元素是指標而已。說明形式為 type pointer array constant1 constant2 co...

指標陣列和陣列指標

該文時自己對指標陣列用法的一點總結,還望高手指點不足原文如下 由於以前對指標陣列不太明白,所以自己寫了 乙個小的測試程式來驗證了自己的猜測,先總結如下 指標陣列,由名字就可以知道的該陣列中的成員都是為指標的。其定義的方法為 char p 5 該初定義乙個包含5個char 型別的陣列的指標,由於p本身...