陣列與指標

22
指標與陣列

Transcript of 陣列與指標

Page 1: 陣列與指標

指標與陣列

Page 2: 陣列與指標

變數與記憶體位址

● 宣告一個變數 int x後,記憶體的配置可能如Variable name Address Value

x 0xAAAA 100

Page 3: 陣列與指標

變數與記憶體位址

● 宣告一個變數 int x後,記憶體的配置可能如

● 取此變數記憶體位址和數值

Variable name Address Value

x 0xAAAA 100

位址 數值

&x x

0xAAA 10

Page 4: 陣列與指標

指標與記憶體位址

● 宣告一個指標 int* ptr後,記憶體的配置可能如Variable name Address Pointer to

*ptr 0xBBBB ???

Page 5: 陣列與指標

指標與記憶體位址

● 宣告一個指標 int* ptr後,記憶體的配置可能如

● 取此指標記憶體位址和數值

Variable name Address Pointer to

*ptr 0xBBBB ???

指標位址 指向的位址

&ptr ptr

0xBBBB ???

Page 6: 陣列與指標

指標與記憶體位址

● 指定到某變數 ptr = &x後,記憶體的配置可能如Variable name Address Value

*ptr 0xBBBB 0xAAAA

Page 7: 陣列與指標

指標與記憶體位址

● 指定到某變數 ptr = &x後,記憶體的配置可能如

● 取此指標記憶體位址和數值

Variable name Address Value

*ptr 0xBBBB 0xAAAA

指標位址 指向的位址 數值

&ptr ptr *ptr

0xBBBB 0xAAAA 100

Page 8: 陣列與指標

指標的運算運算 指向的位址

ptr 0xAAAA

Page 9: 陣列與指標

指標的運算運算 指向的位址

ptr 0xAAAA

ptr+1 0xAAAE

Page 10: 陣列與指標

指標的運算運算 指向的位址

ptr 0xAAAA

ptr+1 0xAAAE

ptr+2 0xAAB3

Page 11: 陣列與指標

指標的運算運算 指向的位址

ptr 0xAAAA

ptr+1 0xAAAE

ptr+2 0xAAB3

ptr-1 0xAAA6

Page 12: 陣列與指標

指標的運算運算 指向的位址

ptr 0xAAAA

ptr+1 0xAAAE

ptr+2 0xAAB3

ptr-1 0xAAA6

ptr-2 0xAAA2

Page 13: 陣列與指標

指標與陣列之記憶體位址 int arr[5] = {0}; int *ptr = arr;

陣列語法 指標語法 記憶體位址

&arr[0] ptr+0 0x34ff30

Page 14: 陣列與指標

指標與陣列之記憶體位址 int arr[5] = {0}; int *ptr = arr;

陣列語法 指標語法 記憶體位址

&arr[0] ptr+0 0x34ff30

&arr[1] ptr+1 0x34ff34

Page 15: 陣列與指標

指標與陣列之記憶體位址 int arr[5] = {0}; int *ptr = arr;

陣列語法 指標語法 記憶體位址

&arr[0] ptr+0 0x34ff30

&arr[1] ptr+1 0x34ff34

&arr[2] ptr+2 0x34ff38

Page 16: 陣列與指標

指標與陣列之記憶體位址 int arr[5] = {0}; int *ptr = arr;

陣列語法 指標語法 記憶體位址

&arr[0] ptr+0 0x34ff30

&arr[1] ptr+1 0x34ff34

&arr[2] ptr+2 0x34ff38

&arr[3] ptr+3 0x34ff3c

Page 17: 陣列與指標

指標與陣列之記憶體位址 int arr[5] = {0}; int *ptr = arr;

陣列語法 指標語法 記憶體位址

&arr[0] ptr+0 0x34ff30

&arr[1] ptr+1 0x34ff34

&arr[2] ptr+2 0x34ff38

&arr[3] ptr+3 0x34ff3c

&arr[4] ptr+4 0x34ff40

Page 18: 陣列與指標

指標與陣列之數值

int arr[5] = {1, 3, 5, 7, 9}; int *ptr = arr;

陣列語法 指標語法 數值

arr[0] *(ptr+0) 1

Page 19: 陣列與指標

指標與陣列之數值

int arr[5] = {1, 3, 5, 7, 9}; int *ptr = arr;

陣列語法 指標語法 數值

arr[0] *(ptr+0) 1

arr[1] *(ptr+1) 3

Page 20: 陣列與指標

指標與陣列之數值

int arr[5] = {1, 3, 5, 7, 9}; int *ptr = arr;

陣列語法 指標語法 數值

arr[0] *(ptr+0) 1

arr[1] *(ptr+1) 3

arr[2] *(ptr+2) 5

Page 21: 陣列與指標

指標與陣列之數值

int arr[5] = {1, 3, 5, 7, 9}; int *ptr = arr;

陣列語法 指標語法 數值

arr[0] *(ptr+0) 1

arr[1] *(ptr+1) 3

arr[2] *(ptr+2) 5

arr[3] *(ptr+3) 7

Page 22: 陣列與指標

指標與陣列之數值

int arr[5] = {1, 3, 5, 7, 9}; int *ptr = arr;

陣列語法 指標語法 數值

arr[0] *(ptr+0) 1

arr[1] *(ptr+1) 3

arr[2] *(ptr+2) 5

arr[3] *(ptr+3) 7

arr[4] *(ptr+4) 9