Presentation is loading. Please wait.

Presentation is loading. Please wait.

101北一女中 資訊選手培訓營 妳不可不了解的指標 2012.07.08 Nan.

Similar presentations


Presentation on theme: "101北一女中 資訊選手培訓營 妳不可不了解的指標 2012.07.08 Nan."— Presentation transcript:

1 101北一女中 資訊選手培訓營 妳不可不了解的指標 Nan

2 指標, 是一個神祕 而複雜的存在。

3 指標表示: 妳誤會我了啦 我很單純的′ ▽`)

4 變數 說到底…指標不過也就只是個…. int* int double float char * unsigned char … 長浮點數
記憶體位置, 目標是一個int 變數 int* 整數 double int float char * unsigned char

5 5 int num = 5; int* ptr = # 做dereference: *ptr  num 0xFFACBB00
叫我記憶體 0xFFACBB00 5 (4bytes) 變數名稱 變數型態 記憶體位置 num int 0xFFACBB00 int* ptr = # 變數名稱 變數型態 記憶體位置 num int 0xFFACBB00 ptr int * 0xFF968C00 叫我記憶體 0xFF968C00 0xFFACBB00 做dereference: *ptr  num

6 如果是指標的指標… int** ptr_ptr = &ptr; 做dereference: *ptr_ptr  ptr
變數名稱 變數型態 記憶體位置 num int 0xFFACBB00 ptr int * 0xFF968C00 ptr_ptr int ** 0xFF9A8C04 叫我記憶體 0xFF9A8C04 0xFF968C00 做dereference: *ptr_ptr  ptr

7 所以對指標做運算的意思是: 對記憶體位置做運算…
int * ptr3 = ptr + 3; 3 * sizeof(int) + 變數名稱 變數型態 記憶體位置 num int 0xFFACBB00 ptr int * 0xFF968C00 ptr3 0xFF968C04 叫我記憶體 0xFF968C00 0xFFACBB00 = 0xFFACBB0C 叫我記憶體 0xFF968C04 0xFFACBB0C

8 陣列其實也是個指標… 不過不能改(const)
int num[3]; num[0] = 5; num[2] = -10; 變數名稱 變數型態 記憶體位置 num int* const 0xFFACBB00 num[2]  *(num + 2) 叫我記憶體 0xFFACBB00 5 0xFFACBB04 0xFFACBB08 ? -10

9 5 ? -10 Q: printf(“%d”, ptr[1] ); A: -10 int* ptr = num + 1;
叫我記憶體 0xFFACBB00 5 ? -10 0xFFACBB04 0xFFACBB08 變數名稱 變數型態 記憶體位置 num const int* 0xFFACBB00 ptr int * 0xFF968C00 int* ptr = num + 1; 叫我記憶體 0xFF968C00 0xFFACBB04 Q: printf(“%d”, ptr[1] ); A: -10

10 練習時間! 這樣會輸出什麼呢? char str[] = “hello world”; char *ptr = str + 3;
printf(“%s\n”, ptr ); printf(“%c\n”, ptr[2]); 這樣會輸出什麼呢?

11 現在,有沒有覺得指標不再是一團迷霧了呢?

12 再多講一點點: 結構(structure)!

13 結構的語法大概長這樣… struct STURCT_NAME{ TYPE FIELD_NAME; … }; int main(){ //…

14 struct student *ptr = &me; me.id = 5; me.weight = 57.0;
int id; double weight; double height; }; int main(){ struct student me; struct student *ptr = &me; me.id = 5; me.weight = 57.0; me.height = 166.5; printf(“%d, %.2lf, %.2lf\n”, ptr->id, ptr->weight, ptr->height); }; 如果是變數本身要存取  用點點 如果要透過指標存取  用箭號-> ptr->id的效力 等同於(*ptr).id


Download ppt "101北一女中 資訊選手培訓營 妳不可不了解的指標 2012.07.08 Nan."

Similar presentations


Ads by Google