C語言小結 指標和陣列的結合

2021-08-04 05:13:04 字數 2097 閱讀 1026

我們知道,訪問乙個變數的內容的實質就是訪問記憶體,訪問乙個變數可以通過變數名訪問,也可以通過指標來訪問。如下的兩種操作printf結果是一樣的:

#include 

int main(void)

結合上一章提到的,int a[10] ; 中a就表示陣列的首位址,那麼我們定義int *p,就可以賦值為p = a;那麼可以通過*p來訪問陣列了,這樣陣列和指標就建立了聯絡。同樣的,我們可以直接把a作為乙個指標來用,可以*a來訪問陣列元素。

#include 

int main(void)

; printf("*a = %d;\n",*a);

return

0;}

結果:

root@ubuntu

:/mnt/hgfs/share/code/c_adcance/priner

# ./a.out

*a = 1;

(1)陣列的特點就是:陣列中的各個元素位址是依次相連線的,而且陣列必須是一種資料型別。

(2)陣列占用位址連續的一片記憶體空間,只要知道其中乙個陣列元素的位址,就可以推算出其他陣列元素的位址。這個特點特別好用指標去是實現。

(1)int *p ; int a[5]; p = a ;//型別匹配

(2)int *p; int a[5]; p = &a; //型別不匹配

(3) 雖然&a 、a 、 &a[0] 三個表示方式從數值上來看是完全相等的,但是其表示的意義不一樣。a和&a[0]表示的陣列元素的首位址,而&a表示的是整個陣列的首位址。從型別上來看:a、&a[0]是元素的指標,是int 型別的;而&a是陣列指標,是int ()[5]。

(1)指標參與運算時,因為指標變數本身儲存的數值是表示位址的,所以運算也是位址的運算。

(2)指標參與運算的特點是,指標變數+1,並不是位址真的+1,而是+1*sizeof[指標型別];如果是int 型別,則+1實際是位址+4,如果是char 型別的指標,則+1則表示位址+1;如果是double *型別的指標

,則就表示位址+8。

(3)指標變數+1時,實際不是+1而是+sizeof[指標型別],主要原因是希望指標+1後剛好指向下乙個元素(當然不希望錯位了)。這樣在指標操作時就非常方便。

總結一下,**體現:

#include 

int main(void)

; int

*p; p = a;

printf("*p = %d. \n", *p);

printf("p = %p. \n", p);

printf("*(p+1) = %d. \n", *(p+1));

printf("((unsigned int)p+1) = %x. \n", ((unsigned int)p+1));

printf(" *(char *)((unsigned int)p+1) = %d. \n", *(char *)((unsigned int)p+1));

printf(" *(int *)((unsigned int)p+1) = %d. \n", *(

int*)((unsigned int)p+1));

return

0;}

當能分析出列印結果時,表明指標和陣列的初步結合就已經搞明白了。列印如下:

root@ubuntu

:/mnt/hgfs/share/code/c_adcance/priner

# gcc array_pointer.c

root@ubuntu

:/mnt/hgfs/share/code/c_adcance/priner

# ./a.out

*p = 1.

p = 0xbf9355dc.

*(p+1) = 2.

((unsigned int)p+1) = bf9355dd.

*(char *)((unsigned int)p+1) = 0.

*(int *)((unsigned int)p+1) = 33554432.

指標和陣列小結

指標在32位程式中佔4個位元組,在64位程式中佔8個位元組。陣列指標 int p 10 指標陣列 int a 10 1 一維陣列int a 4 如上面的陣列a,a為陣列名,代表陣列首元素的位址,其本質是位址,所以可以將其看為普通的指標。a,代表陣列的位址,可以將其看成陣列指標。2 二維陣列int a...

C語言指標陣列和陣列指標

初學者總是分不出指標陣列與陣列指標的區別。其實很好理解 指標陣列 首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是 儲存指標的陣列 的簡稱。陣列指標 首先它是乙個指標,它指向乙個陣列。在32 位系統下永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道。它是 指向陣...

C語言指標陣列和陣列指標

初學者總是分不出指標陣列與陣列指標的區別。其實很好理解 指標陣列 首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是 儲存指標的陣列 的簡稱。陣列指標 首先它是乙個指標,它指向乙個陣列。在32 位系統下永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道。它是 指向陣...