陣列和指標在編譯的時候的區別

2021-04-27 02:10:56 字數 752 閱讀 6123

c語言中指標和陣列在編譯時的區別 例如:int a[10]和int *b,a[5]和*(b+5) 在編譯的時候區別是什麼? 經過反覆的查資料和請教他人,最後在《c專家程式設計》裡找到了很好的答案。

1。編譯器對陣列名和指標變數的處理方式

編譯器在編譯時會產生乙個符號表,記錄了符號名和它的位址。對於指標變數,這顯然很好理解。而陣列名就不那麼明顯了,它僅僅是乙個符號而已,何來位址?編譯器是這樣處理的,它記錄了array[0]的位址;這和我們通常的理解也是一樣的。

2。帶下標形式的陣列和指標定址方式

(1)陣列情形

char a[9]="abcdefgh";

...

c=a[i];

在編譯期,會在符號表中建立這樣一條記錄:

name:a  address:9980

要獲取a[i]的值分兩個步驟:

step 1:取得i的值並和9980相加

step 2:在記憶體位址(9980+i)處取其內容

(2)指標情形

char* p="abcdefgh";

...

c=p[i];

在編譯期,會在符號表中建立這樣一條記錄:

name:p  address:4624

要獲取p[i]的值分三個步驟:

step 1:在記憶體位址4624處取其內容,比如說「5081」

step 2:取得i的值並和5081相加

step 3:在記憶體位址(5081+i)取其內容

C Ado 在編譯的時候,報錯。

其中錯誤提示如下 fatal error c1083 cannot open type library file c program files common files system ado msjro.dll no such file or directory 1 首先確定在標頭檔案ado2.h...

陣列指標和指標陣列的區別

陣列指標 也稱行指標 定義 int p n 優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p 1時,p要跨過n個整型資料的長度。如要將二維陣列賦給一指標,應這樣賦值 int a 3 4 int p 4 該語句是定義乙個陣列指標,指向...

陣列指標和指標陣列的區別

陣列指標 也稱行指標 定義 int p n 優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p 1時,p要跨過n個整型資料的長度。如要將二維陣列賦給一指標,應這樣賦值 int a 3 4 int p 4 該語句是定義乙個陣列指標,指向...