指標與陣列 C語言

2021-10-03 15:46:50 字數 2185 閱讀 7302

概念:

陣列:儲存多個相同型別資料的集合

注意:

指標:

int a = 10;

int b = 20;

int *p; // 定義整型指標( 位址) 變數

p = &a; //」&」 取位址符,&a 取a 的位址

int *p1 = &a; // 等同p

*p = 100; //*p: 對p 解引用, 即為a=100;

p = &b; //p 賦值為b 的位址

*p = 200; //b = 200;

int **pp = &p; // 二級指標變數pp 賦值為p 的位址

*pp = &a; //p = &a;

**pp = 1000; //a = 1000;

*pp = &b; **pp = 2000;//b = 2000;

一、定義指標變數:型別 * 變數名;

如:int *p1, *p2;

注意: 指標變數在32 位平台(x86) 為4 個位元組

在64 位平台(x64) 為8

(1) & & 取位址運算子。

&a 是變數a 的位址

(2) * 指標運算子(「間接訪問」運算子)

如果: p 指向變數a , 則*p 就代表a 。

k=*p; ( 把a 的值 賦給k)

*p=1; ( 把1 賦給a)

三、可以用乙個指標變數指向乙個陣列元素

int a[10]=;

int *p;

p=&a[0];

注意:這裡陣列名a不代表整個陣列,只代表陣列首元素的位址。

「p=a; 」的作用是「把a陣列的首元素的位址賦給指標變數 元素的位址賦給指標變數p」而不是「把陣列 不是「把陣列a 各元素的值賦給p」。

四、引用乙個陣列元素,可用下面兩種方法:

(1) 下標法,如a[i] 形式

(2) 指標法,如*(a+i) 或*(p+i)

其中a 是陣列名,p 是指向陣列元素的指標變數,其初值p=a

兩個重要的表示式:

五、 用陣列名作函式引數時

因為 實參陣列名代表該陣列首元素的位址 ,

形參應該是乙個指標變數

:c 編譯都是將形參陣列名作為指標變數來處理的

六、指標和陣列的不同:

1、大小不同

指標: 指標變數在32 位平台(x86) 為4 個位元組

在64 位平台(x64) 為8個位元組

陣列所佔儲存空間的記憶體:sizeof(陣列名) 

陣列的大小:sizeof(陣列名)/sizeof(資料型別)

2、儲存方式不同

指標:它可以指向任何型別的資料。

指標的型別說明了它所指向位址空間的記憶體。

由於指標本身就是乙個變數,它所存放的也是變數,

所以指標的儲存空間不確定。

陣列:在記憶體中是連續存放的,開闢一塊連續的記憶體空間。

陣列是根據陣列的下標進行訪問的,

多維陣列在記憶體中是按照一維陣列訪問的,

只是在邏輯上是多維的。

陣列的儲存空間在靜態儲存區或棧上。

3、指標可以++,陣列名不可以。

七、指標的型別強轉

int main()

; int *p1 = (int *)(&arr+1);

printf("%d\n",p1[-2]); //1

int *p2 = (int *)((int *)&arr+1);

printf("%x\n",p2); //2

int *p3 = (int *)((int )&arr+1);

printf("%x\n",p3); //3

retuen 0;

}

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.兩個指標相加減 兩指標必須指向同一變數!否則運算沒有意義的...