1 / 39

| 10 指標

| 10 指標. 10.1 變數與儲存位址. | 讀取變數的運算. 100. 100. 表面作業. X. 100. 100. 100. 底層作業. X. 240ff5c 位址. 4. 3. 2. 1. |. 位址表示法 >>. 10.1 變數與儲存位址. | 位址的表示法. 位址以十六進位的格式表示,例如 240ff5c & 運算子支援變數的位址資訊存取 printf(“%d”,&x) ; // 十進位 printf(“%p”,&x) ; // 十六進位. << 讀取變數的運算 . 範例:變數位址 >>.

jonah-vega
Download Presentation

| 10 指標

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. |10指標

  2. 10.1 變數與儲存位址 |讀取變數的運算 100 100 表面作業 X 100 100 100 底層作業 X 240ff5c 位址 4 3 2 1 | 位址表示法 >>

  3. 10.1 變數與儲存位址 |位址的表示法 • 位址以十六進位的格式表示,例如 240ff5c • & 運算子支援變數的位址資訊存取 • printf(“%d”,&x) ; // 十進位 • printf(“%p”,&x) ; // 十六進位 << 讀取變數的運算  範例:變數位址 >>

  4. 10.1 變數與儲存位址 |範例:變數位址 x 200 240ff5c (37814108) y 200 10 240ff58 (37814104) 9 8 z 7 100.123 6 240ff50 (37814096) 5 x 位址(10,16): y 位址(10,16): z 位址(10,16): 37814108 37814104 37814096 240ff5c 240ff58 240ff50 4 3 2 1 << 位址的表示法  & 運算子與變數 x 的關聯 >>

  5. 10.1 變數與儲存位址 |& 運算子與變數 x 的關聯 &x 200 37814108 240ff5c %d %p 4 3 2 1 << 範例:變數位址  「指標變數」的宣告與設值 >>

  6. 10.2 使用指標 |「指標變數」的宣告與設值 10.2.1 變數與指標變數 指標變數專門用來儲存位址資料,以 * 為字首宣告: ptype *pname ; ptype *pname = &vname ; 透過 「&」 連結變數名稱取得指標,將其指定給指標變數 pname: 2 1 << 運算子 & 與變數 x 的關聯  「指標變數」的 * 使用時機 >>

  7. 10.2 使用指標 |「指標變數」的 * 使用時機 10.2.1 變數與指標變數 指標變數宣告時以 * 標示: ptype *pname ; pname = &vname ; 指標變數單獨設值時不可以 * 標示: 2 1 << 「指標變數」的宣告與設值  「指標變數」的設值實際語法 >>

  8. 10.2 使用指標 |「指標變數」的設值實際語法 10.2.1 變數與指標變數 int *pt ; pt = &x ; int *pt = &x ; pt 變數 X 200 240ff5c 240ff5c 4 3 2 1 透過 * 取得指標變數的對應值 >> << 「指標變數」的 * 使用時機 

  9. 10.2 使用指標 |透過 * 取得指標變數的對應值 10.2.1 變數與指標變數 pt 變數 X 200 240ff5c *pt 240ff5c 2 1 << 「指標變數」的設值實際語法 範例:指標 >>

  10. 10.2 使用指標 |範例:指標 10.2.1 變數與指標變數 6 5 變數 x 位址 : 指標變數 y : 指標變數 y 的值 : 0022FF74 4 0022FF74 3 2 200 1 << 透過 * 取得指標變數的對應值  「指標變數」的表示語法與對應值 >>

  11. 10.2 使用指標 |「指標變數」的表示語法與對應值 10.2.1 變數與指標變數 int x int *y 「&」:取出變數的位址 「*」:取出「指標變數」的值 << 範例:指標  多「指標變數」宣告 >>

  12. 10.2 使用指標 |多「指標變數」宣告 10.2.2 「*」與指標變數 只有第 1 個 x 是「指標變數」 ptype* pname ; int* x,y,z ; int *x,y,z ; 將 「*」 配置於變數,只有以此標示的變數被宣告為「指標變數」 2 1 << 「指標變數」的表示語法與對應值 範例:* 與「指標變數」宣告 >>

  13. 10.2 使用指標 |範例:* 與「指標變數」宣告 10.2.2 「*」與指標變數 y 是一般的變數 非指標變數不能以 * 指定 6 5 4 100 37814108 3 printf("%d",y); 2 1 << 多指標變數宣告  範例:變更「指標變數」位址 >>

  14. 10.2 使用指標 |範例:變更「指標變數」位址 10.2.3 「指標變數」的重設與變數位址 a = b 600 x = &a 9 0022FF74 8 7 x = &b 6 0022FF70 5 4 變數 a (位址,值): 變數 a (位址,值): 變數 b (位址,值): 0022FF74,200 0022FF74,600 0022FF70,600 3 2 1 << 範例:* 與「指標變數」宣告 範例:變更「指標變數」位址 – 變數變化 >>

  15. 10.2 使用指標 |範例:變更「指標變數」位址 – 變數變化 10.2.3 「指標變數」的重設與變數位址 x a b 022FF74 200 600 022FF74 022FF74 022FF70 Int *x = &a x a b a=b 022FF74 200 600 600 600 022FF74 022FF74 022FF70 x = &a 8 7 x a b 6 022FF70 200 600 5 4 022FF74 022FF70 022FF70 3 x = &b 2 1 << 範例:變更「指標變數」位址  範例:變更指標變數值 >>

  16. 10.2 使用指標 |範例:變更指標變數值 10.2.4 「指標變數」與變數內容變更 0022FF74 Int *x = &a 12 11 *x = b 600 10 9 8 7 6 5 0022FF74, 0022FF74, 200 600 變數 a (位址,值): 變數 a (位址,值): 變數 a,b: 4 3 600,600 2 1 << 範例:變更「指標變數」位址 - 變數變化   範例:變更指標變數值 – 值變化圖示 >>

  17. 10.2 使用指標 |範例:變更指標變數值 – 值變化圖示 10.2.4 「指標變數」與變數內容變更 x a b 022FF74 200 600 022FF74 022FF74 022FF70 Int *x = &a x a b 022FF74 200 600 600 600 022FF74 022FF74 022FF70 4 *x = b 3 2 1 << 範例:變更指標變數值  指標變數的型態宣告 >>

  18. 10.2 使用指標 |指標變數的型態宣告 10.2.5 「指標變數」的型態 宣告 float 型態的浮點數變數 a float a = 600 ; float *x=&a ; 宣告 float 型態的指標變數, 儲存 float 型態變數 a 的位址 2 1 << 範例:變更指標變數值 – 值變化圖示  範例:「指標變數」的型態衝突 >>

  19. 10.2 使用指標 |範例:「指標變數」的型態衝突 10.2.5 「指標變數」的型態 a 是 float 與 x 的 int 不相容 a 是 float 與 y 相容 6 5 指標變數 x (位址,值) : 指標變數 y (位址,值) : 37814108, 37814108, 0.000000 600.000000 4 3 2 1 << 指數變數的型態宣告  指標與變數儲存位址 >>

  20. 10.2 使用指標 |指標與變數儲存位址 10.2.5 指標的位址架構與運算 4111 X 記憶體結構 4110 X 變數 200 4109 4108 4108 2 1 << 範例:「指標變數」的型態衝突 指標運算 >>

  21. 10.2 使用指標 |指標運算 10.2.5 指標的位址架構與運算 4115 4114 4113 int *p = &x ; p++ ; 4112 4111 4110 4109 4108 4108 2 1 << 指標與變數儲存位址 指標運算 >>

  22. 10.2 使用指標 |指標運算 10.2.5 指標的位址架構與運算 x 位址指標 pt x 變數 4111 4108 200 200 4110 4109 4108 4108 4108 x 位址指標 pt x 變數 4115 pt++ v 200 4114 v 4113 4112 4108+4 4111 4110 4 4109 3 4112 4112 4108 2 1 << 指標運算  範例:指標算術運算 >>

  23. 10.2 使用指標 |範例:指標算術運算 10.2.5 指標的位址架構與運算 位址(i,d,c):37814108,37814096,37814095 -值(i,d,c):200,100.123000,A 位址(i,d,c):37814112,37814104,37814096 -值(i,d,c):37814176,0.000000, 位址(i,d,c):37814116,37814112,37814097 -值(i,d,c):4198849,0.000000,Z p++ -> 37814108+4(int) -> 37814112 dp++ -> 37814096+8(double) -> 37814104 cp++ -> 37814095+1(char) -> 37814096 7 p++ -> 37814112+4(int) -> 37814116 dp++ -> 37814104+8(double) -> 37814112 cp++ -> 37814096+1(char) -> 37814097 6 5 4 3 2 1 << 指標運算  函數的指標類型引數宣告 >>

  24. 10.3 指標與函數 |函數的指標類型引數宣告 10.3.1 指標與函數引數 指標變數引數原型宣告 void dosome(ptype *); void dosome(ptype *pt); 指標變數引數宣告, * 表示 pt 為指標變數 2 1 << 範例:指標算術運算  範例:函數引數 >>

  25. 10.3 指標與函數 |範例:函數引數 10.3.1 指標與函數引數 原型宣告接受指標變數引數 p 為指標變數 3 2 1 << 函數的指標類型引數宣告  範例:函數引數 >>

  26. 10.3 指標與函數 |範例:函數引數 10.3.1 指標與函數引數 &a 5 4 參數 *p(位址,值) : 37814108, 100 3 2 1 << 範例:函式引數  範例:函式引數 >>

  27. 10.3 指標與函數 |範例:函式引數 10.3.1 指標與函數引數 &b 5 4 參數 *p(位址,值) : 37814104, 200 3 2 1 範例:「指標變數」傳址 >> << 範例:函數引數 

  28. 10.3 指標與函數 |範例:「指標變數」傳址 10.3.2 「指標變數」的傳址行為 a => 10+10 = 20 a的位址 10 v => 10+10 = 20 7 6 5 a:20, b:10 4 3 2 1 << 範例:函數引數 範例:「指標變數」傳址 – 傳址圖示 >>

  29. 10.3 指標與函數 |範例:「指標變數」傳址 – 傳址圖示 10.3.2 指標變數的傳址行為 2 1 << 範例:「指標變數」傳址  範例:計算正方型面積 >>

  30. 10.3 指標與函數 |範例:計算正方形面積 10.3.2 指標變數的傳址行為 area => 16x16=256 請輸入正方形邊長(cm): 長度 16 cm 的正方形,面積等於 256 cm^2 16 area 16 7 6 5 4 3 2 1 << 範例:「指標變數」傳址 – 傳址圖示  回傳指標函數宣告 >>

  31. 10.3 指標與函數 |回傳指標函數宣告 10.3.3 回傳指標 配置 「*」 即可讓函數本身回傳指標 typename *funname(type1,…) ; // 函數原型宣告 typename *funname(type1 arg,…) // 函數定義 { … return p ; } return 的 p 必須是指標 2 1 << 範例:計算正方形面積  範例:回傳指標 >>

  32. 10.3 指標與函數 |範例:回傳指標 10.3.3 回傳指標 2 1 << 回傳指標函數宣告  範例:回傳指標 >>

  33. 10.3 指標與函數 |範例:回傳指標 10.3.3 回傳指標 a(位址,值):37814072,10 10 8 7 6 5 4 return &x ; 37814072 3 37814072 2 1 << 範例:回傳指標  「指標變數」的位址 >>

  34. 10.4 雙重指標 |「指標變數」的位址 pt 變數 x *pt 022FF74 200 022FF74 022FF74 022FF74 022FF70 &x &pt 4 3 2 1 << 範例:回傳指標  範例:「指標變數」位址 >>

  35. 10.4 雙重指標 |範例:「指標變數」位址 4.1.2 printf() 與格式化輸出 pt x 1000 1000 0022FF74 022FF74 0022FF70 022FF70 022FF74 9 8 7 pt *pt 6 5 pt指向的 x 變數值(*pt): pt本身的值(pt): pt本身的位址(&pt): 1000 4 0022FF74 3 0022FF70 2 1 <<「指標變數」的位址  雙重指標 >>

  36. 10.4 雙重指標 |雙重指標 ppt 變數 X pt 022FF70 022FF74 1000 022FF70 022FF70 022FF74 022FF74 2 1 << 範例:「指標變數」位址  雙重指標變數宣告 >>

  37. 10.4 雙重指標 |雙重指標變數宣告 配置 「**」 宣告雙重指標 int **dpt ; dpt = &pt ; pt 是一般的「指標變數」 2 1 << 雙重指標 範例:雙重指標 >>

  38. 10.4 雙重指標 |範例:雙重指標 dpt pt x 022FF70 022FF74 1000 022FF70 022FF74 5 4 3 2 1 << 雙重指標變數宣告  範例:雙重指標 >>

  39. 10.4 雙重指標 |範例:雙重指標 **dpt dpt pt x 022FF70 022FF74 1000 022FF70 022FF74 x 位址: ,pt 儲存的值: pt 位址: ,dpt 儲存的值: x 的值: ,pt 指標對應的值: pt 的值: ,dpt 指標對應的值: dpt 指標最終對應的值:1000 0022FF74 0022FF74 0022FF70 0022FF70 13 1000 1000 12 0022FF74 0022FF74 11 10 9 8 7 6 5 4 3 2 1 << 範例:雙動指標  |

More Related