指標與陣列(C語言)

2021-10-17 05:03:16 字數 2406 閱讀 9051

指向一維陣列的指標變數

(1)p+i和a+i就是a[i]的位址

(2)*(p+i)或*(a+i)就是其所指向的元素

(3)指向陣列的指標變數也可以帶下標,如p[i]與*(p+i)等價

#include

main()

;printf

("%d"

,*a)

;//輸出結果為1 ,輸出的是a[0]的值

}

#include

main()

;printf

("%d",*

(a+0))

;//輸出結果為1 ,輸出的是a[0]的值 ,總之a+n,n為數列中第幾個的值

}

#include

main()

;int i;

for(i=

0;i<

4;i++

)printf

("%d",*

(a+i));

//輸出結果為1234

}

自增、自減運算子和指標運算子

#include

main()

,*p;

p=a;

printf

("%d"

,*p)

;//輸出結果為1

printf

("\n");

p=a;

//讓指標變數復位,指向首位址

printf

("%d",*

(p++))

;//輸出結果為1

printf

("\n");

p=a;

printf

("%d",*

(++p));

//輸出結果為2

printf

("\n");

p=a;

printf

("%d",++

*p);

//輸出結果為2

printf

("\n");

p=a;

printf

("%d",(

*p)++);

//輸出結果為2

}

指向多維陣列的指標變數

#include

main()

,},*p;

int i;

for(p=

*a;p<

*a+2*3

;p++

)//*a+[2]*[3]為其元素位址格式

printf

("\n%d"

,*p)

;//輸出結果為123456

}

#include

main()

,},*p;

int i,j;

scanf

("%d"

,&i)

;scanf

("%d"

,&j)

; p=a[0]

;printf

("%d",*

(p+i*

3+j));

//元素位址格式

}

#include

main()

,};int

(*p)[3

];int i,j;

scanf

("%d"

,&i)

;scanf

("%d"

,&j)

; p=a;

printf

("%d",*

(*p+i)

+j);

}

(1)p=a,將二維陣列的首位址賦給了p。p加法的單位為3個單元,因此p+i等價於a+i,*(p+i)等價於*(a+i),即a[i][0]的首位址。

(2)*(p+i)+j等價於&a[i][0]+j,即a[i][j]的位址

(3)*(*(p+i)+j)等價於(*(p+i))[j],即a[i][j]的值

指向指標的指標

如果乙個指標變數存放的又是另乙個指標的位址,則稱這個指標變數為指向指標的指標變數

#include

intmain()

;char

**p;

int i;

for(i=

0;i<

5;i++

)}

C語言指標陣列與陣列指標

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

C語言指標 指標與陣列

1 指標與一維陣列 2 指標與二維陣列 3 指標陣列與陣列指標 指標裡面最難的一種就是指標與陣列了,對於指標和二維陣列來說這裡面的關係比較複雜。牽涉到編譯器的原理和編譯過程。1 指標與一維陣列 指標是指向乙個記憶體的位址,一維陣列的陣列名代表一塊記憶體 這個陣列 的首位址,和陣列首元素的位址一樣,但...

C語言指標 指標與陣列

一 指標的運算 指標可以進行三種運算 1.指標加上整數 如果指標p指向陣列a i 那麼指標p j 指向a i j 前提是a i j 存在!2.指標減去整數 如果指標p指向陣列a i 那麼指標p j 指向a i j 前提 a i j 存在!3.兩個指標相加減 兩指標必須指向同一變數!否則運算沒有意義的...