| 11 指標與陣列

27
C 語語語語語語 11 語語語語語

Upload: jesse

Post on 05-Jan-2016

68 views

Category:

Documents


2 download

DESCRIPTION

| 11 指標與陣列. 11.1 陣列的位址. | 範例:陣列位址. 陣列 a 的位址: 0022FF50 元素 a[0] 的位址: 0022FF50 元素 a[1] 的位址: 0022FF54 元素 a[2] 的位址: 0022FF58 元素 a[3] 的位址: 0022FF5C 元素 a[4] 的位址: 0022FF60 元素 a[5] 的位址: 0022FF64. 3. 2. 1. |  .  陣列結構與位址配置 >>. 11.1 陣列的位址. | 陣列結構與位址配置.

TRANSCRIPT

Page 1: | 11 指標與陣列

C 語言入門經典

| 11  指標與陣列

Page 2: | 11 指標與陣列

C 語言入門經典

3

2

1

 陣列結構與位址配置 >> |  

|範例:陣列位址11.1 陣列的位址

陣列 a 的位址: 0022FF50元素 a[0] 的位址: 0022FF50元素 a[1] 的位址: 0022FF54元素 a[2] 的位址: 0022FF58元素 a[3] 的位址: 0022FF5C元素 a[4] 的位址: 0022FF60元素 a[5] 的位址: 0022FF64

Page 3: | 11 指標與陣列

C 語言入門經典   陣列與一般變數的位址配置比較 >> << 範例:陣列位址  

|陣列結構與位址配置11.1 陣列的位址

Page 4: | 11 指標與陣列

C 語言入門經典  範例:陣列的值 >> << 陣列結構與位址配置  

|陣列與一般變數的位址配置比較11.1 陣列的位址

int x ;

Page 5: | 11 指標與陣列

C 語言入門經典

4

3

2

1

 位址與值 >> << 陣列與一般變數的位址配置比較  

|範例:陣列的值

陣列 a 的位址: 0022FF50陣列 a 的值: 0022FF50元素 a[0] 的值: 00000064元素 a[1] 的值: 000000C8

11.1 陣列的位址

Page 6: | 11 指標與陣列

C 語言入門經典   指標與陣列元素關聯 >> << 範例:陣列的值  

|位址與值11.1 陣列的位址

Page 7: | 11 指標與陣列

C 語言入門經典  範例:陣列元素位址 >> << 位址與值  

|指標與陣列元素關聯11.2 陣列指標與元素存取

11.2.1 透過指標存取陣列元素

Page 8: | 11 指標與陣列

C 語言入門經典  位址運算與陣列元素存取 >> << 指標與陣列元素關聯  

|範例:陣列元素位址

a : 0022FF50 , a[0]:0022FF50a+1 : 0022FF54 , a[1]:0022FF54a+2 : 0022FF58 , a[2]:0022FF58a+3 : 0022FF5C , a[3]:0022FF5Ca+4 : 0022FF60 , a[4]:0022FF60a+5 : 0022FF64 , a[5]:0022FF64

5

4

3

2

1

6

11.2 陣列指標與元素存取

11.2.1 透過指標存取陣列元素

Page 9: | 11 指標與陣列

C 語言入門經典  範例:陣列元素存取 >> << 範例:陣列元素位址  

|位址運算與陣列元素存取11.2 陣列指標與元素存取

11.2.1 透過指標存取陣列元素

Page 10: | 11 指標與陣列

C 語言入門經典

5

4

3

2

1

  printf() >> << 位址運算與陣列元素存取  

6

|範例:陣列元素存取11.2 陣列指標與元素存取

11.2.1 透過指標存取陣列元素

a[0] : 100a[1] : 200a[2] : 300

Page 11: | 11 指標與陣列

C 語言入門經典

2

1

 陣列值的修改 >> << 範例:陣列元素存取  

| printf()

a[0] : 100a[1] : 200a[2] : 300a[3] : 400a[4] : 500a[5] : 600

11.2 陣列指標與元素存取

11.2.1 透過指標存取陣列元素

Page 12: | 11 指標與陣列

C 語言入門經典  位址設定操作 >> << printf()   

|陣列值的修改11.2 陣列指標與元素存取

11.2.2 變更陣列位址值的錯誤

int a[]={100,200,300,400,500,600} ;a++ ;a=100;

• 陣列本身所儲存的位址值是一個常數值• 嘗試修改 a 的值不被允許• 第 2 行與第 3 行都會出現錯誤

int *p= a ;p++ ;• 修改一般的指標變數不會有任何問題。

Page 13: | 11 指標與陣列

C 語言入門經典  陣列元素存取 >> << 陣列值的修改  

|位址設定操作11.2 陣列指標與元素存取

11.2.2 變更陣列位址值的錯誤

Page 14: | 11 指標與陣列

C 語言入門經典

4

3

2

1

 宣告儲存指標資料的陣列 >> << 位址設定操作  

|陣列元素存取

p 位址: 0240FF40p 值 : 100p++ 位址: 0240FF44p++ 值 : 200a[0] 位址: 0240FF40a[0] 值 : 100a[1] 位址: 0240FF44a[1] 值 : 200

陣列元素存取

5

6

11.2 陣列指標與元素存取

11.2.2 變更陣列位址值的錯誤

Page 15: | 11 指標與陣列

C 語言入門經典  儲存不規則陣列 >> << 陣列元素存取  

|宣告儲存指標資料的陣列11.3 以指標為儲存元素的陣列

int *pt[i] ;

• pt 陣列可以儲存 i 個指向特定整數值的指標

Page 16: | 11 指標與陣列

C 語言入門經典

2

1

 範例:儲存指標示元素的陣列 >> << 宣告儲存指標資料的陣列  

|儲存不規則陣列

int x[3][5] ;

11.3 以指標為儲存元素的陣列

Page 17: | 11 指標與陣列

C 語言入門經典  二維陣列位址與元素值 >> << 儲存不規則陣列  

|範例:儲存指標元素的陣列

a[]: 100,200,300,400b[]: 111,222,333,444,555c[]: 100,300,500

100 200 300 400

111 222 333 444 555

100 300 500

5

4

3

2

1

6

7

11.3 以指標為儲存元素的陣列

Page 18: | 11 指標與陣列

C 語言入門經典  二維陣列位址與元素值 >> << 範例:儲存指標元素的陣列  

|二維陣列位址與元素值11.4 指標與二維陣列

int x[3][4] ;

• 第一個元素 x[0][0] 的位址,剛好是陣列的位址,同時也是它所儲存的值。

11.4.1 二維陣列位址

Page 19: | 11 指標與陣列

C 語言入門經典  範例:二維陣列與指標 >> << 二維陣列位址與元素值  

int x[2][3]= {{100,200,300},{111,222,333}} ;

• x 的第 1 個元素 x[0][0] ,是第 1 個一維陣列中的第 1 個元素 100 ,它的位址等同於陣列 x 本身的位址,也是它的值。

|二維陣列位址與元素值11.4 指標與二維陣列

11.4.1 二維陣列位址

Page 20: | 11 指標與陣列

C 語言入門經典

3

2

1

 二維陣列指標 >> << 二維陣列位址與元素值  

|範例:二維陣列與指標11.4 指標與二維陣列

11.4.1 二維陣列位址

x[0][0] 位址: 0240FF40x 位址: 0240FF40x 的值: 0240FF40

Page 21: | 11 指標與陣列

C 語言入門經典  範例:二維陣列與指標運算 >> << 範例:二維陣列與指標  

|二維陣列指標11.4 指標與二維陣列

11.4.2 二維陣列的指標運算

Page 22: | 11 指標與陣列

C 語言入門經典

5

4

3

2

1

 存取第二個一維陣列的值 >> << 二維陣列指標  

6

7

8

|範例:二維陣列與指標運算11.4 指標與二維陣列

x[0] 的元素: 100,200,300x[1] 的元素: 111,222,333

100 200 300

111 222 333

11.4.2 二維陣列的指標運算

Page 23: | 11 指標與陣列

C 語言入門經典  字串與陣列 >> << 範例:二維陣列與指標運算  

|存取第二個一維陣列的值

int b10 = *x[1];int b11 = *(x[1]+1);int b12 = *(x[1]+2);

11.4 指標與二維陣列

11.4.2 二維陣列的指標運算

• x[1] 表示第 2 個一維陣列,因此會從第 2 個陣列的第 1 個值開始讀取

Page 24: | 11 指標與陣列

C 語言入門經典  範例:字串 >> << 存取第二個一維陣列的值  

|字串與陣列11.5 字串與陣列指標

char str[]="ABCDE" ;char *strp = "abcde" ;

• 第 1 行是典型的 char 陣列

• 第 2 行將字串指定給「指標變數」 strp

• 陣列本身所儲存的值便是一個位址資訊,因此可以直接指定給指標變數

Page 25: | 11 指標與陣列

C 語言入門經典  字元與陣列 >> << 字串與陣列  

|範例:字串

str 位址 :0240FF50str 值 :good morningcp 位址 :0040121Ecp 值 :wwww.google.com

11.5 字串與陣列指標

5

4

3

2

1

6

Page 26: | 11 指標與陣列

C 語言入門經典  範例:字串陣列 >> << 範例:字串  

|字元與陣列

char str[3][3]={"AAA","BBB","CCC"} ;char *cp[3] = {"aaa","bbb","ccc"} ;

• 第 1 行是傳統的二維字元陣列,可以用來儲存數個字串

• 第 2 行以指標陣列儲存字串

11.5 字串與陣列指標

Page 27: | 11 指標與陣列

C 語言入門經典

2

1

 |<< 字元與陣列  

|範例:字串陣列

Singapore

TAIWAN CHINA JAPAN

USA Italy

11.5 字串與陣列指標