390 likes | 551 Views
| 10 指標. 10.1 變數與儲存位址. | 讀取變數的運算. 100. 100. 表面作業. X. 100. 100. 100. 底層作業. X. 240ff5c 位址. 4. 3. 2. 1. |. 位址表示法 >>. 10.1 變數與儲存位址. | 位址的表示法. 位址以十六進位的格式表示,例如 240ff5c & 運算子支援變數的位址資訊存取 printf(“%d”,&x) ; // 十進位 printf(“%p”,&x) ; // 十六進位. << 讀取變數的運算 . 範例:變數位址 >>.
E N D
10.1 變數與儲存位址 |讀取變數的運算 100 100 表面作業 X 100 100 100 底層作業 X 240ff5c 位址 4 3 2 1 | 位址表示法 >>
10.1 變數與儲存位址 |位址的表示法 • 位址以十六進位的格式表示,例如 240ff5c • & 運算子支援變數的位址資訊存取 • printf(“%d”,&x) ; // 十進位 • printf(“%p”,&x) ; // 十六進位 << 讀取變數的運算 範例:變數位址 >>
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 的關聯 >>
10.1 變數與儲存位址 |& 運算子與變數 x 的關聯 &x 200 37814108 240ff5c %d %p 4 3 2 1 << 範例:變數位址 「指標變數」的宣告與設值 >>
10.2 使用指標 |「指標變數」的宣告與設值 10.2.1 變數與指標變數 指標變數專門用來儲存位址資料,以 * 為字首宣告: ptype *pname ; ptype *pname = &vname ; 透過 「&」 連結變數名稱取得指標,將其指定給指標變數 pname: 2 1 << 運算子 & 與變數 x 的關聯 「指標變數」的 * 使用時機 >>
10.2 使用指標 |「指標變數」的 * 使用時機 10.2.1 變數與指標變數 指標變數宣告時以 * 標示: ptype *pname ; pname = &vname ; 指標變數單獨設值時不可以 * 標示: 2 1 << 「指標變數」的宣告與設值 「指標變數」的設值實際語法 >>
10.2 使用指標 |「指標變數」的設值實際語法 10.2.1 變數與指標變數 int *pt ; pt = &x ; int *pt = &x ; pt 變數 X 200 240ff5c 240ff5c 4 3 2 1 透過 * 取得指標變數的對應值 >> << 「指標變數」的 * 使用時機
10.2 使用指標 |透過 * 取得指標變數的對應值 10.2.1 變數與指標變數 pt 變數 X 200 240ff5c *pt 240ff5c 2 1 << 「指標變數」的設值實際語法 範例:指標 >>
10.2 使用指標 |範例:指標 10.2.1 變數與指標變數 6 5 變數 x 位址 : 指標變數 y : 指標變數 y 的值 : 0022FF74 4 0022FF74 3 2 200 1 << 透過 * 取得指標變數的對應值 「指標變數」的表示語法與對應值 >>
10.2 使用指標 |「指標變數」的表示語法與對應值 10.2.1 變數與指標變數 int x int *y 「&」:取出變數的位址 「*」:取出「指標變數」的值 << 範例:指標 多「指標變數」宣告 >>
10.2 使用指標 |多「指標變數」宣告 10.2.2 「*」與指標變數 只有第 1 個 x 是「指標變數」 ptype* pname ; int* x,y,z ; int *x,y,z ; 將 「*」 配置於變數,只有以此標示的變數被宣告為「指標變數」 2 1 << 「指標變數」的表示語法與對應值 範例:* 與「指標變數」宣告 >>
10.2 使用指標 |範例:* 與「指標變數」宣告 10.2.2 「*」與指標變數 y 是一般的變數 非指標變數不能以 * 指定 6 5 4 100 37814108 3 printf("%d",y); 2 1 << 多指標變數宣告 範例:變更「指標變數」位址 >>
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 << 範例:* 與「指標變數」宣告 範例:變更「指標變數」位址 – 變數變化 >>
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 << 範例:變更「指標變數」位址 範例:變更指標變數值 >>
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 << 範例:變更「指標變數」位址 - 變數變化 範例:變更指標變數值 – 值變化圖示 >>
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 << 範例:變更指標變數值 指標變數的型態宣告 >>
10.2 使用指標 |指標變數的型態宣告 10.2.5 「指標變數」的型態 宣告 float 型態的浮點數變數 a float a = 600 ; float *x=&a ; 宣告 float 型態的指標變數, 儲存 float 型態變數 a 的位址 2 1 << 範例:變更指標變數值 – 值變化圖示 範例:「指標變數」的型態衝突 >>
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 << 指數變數的型態宣告 指標與變數儲存位址 >>
10.2 使用指標 |指標與變數儲存位址 10.2.5 指標的位址架構與運算 4111 X 記憶體結構 4110 X 變數 200 4109 4108 4108 2 1 << 範例:「指標變數」的型態衝突 指標運算 >>
10.2 使用指標 |指標運算 10.2.5 指標的位址架構與運算 4115 4114 4113 int *p = &x ; p++ ; 4112 4111 4110 4109 4108 4108 2 1 << 指標與變數儲存位址 指標運算 >>
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 << 指標運算 範例:指標算術運算 >>
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 << 指標運算 函數的指標類型引數宣告 >>
10.3 指標與函數 |函數的指標類型引數宣告 10.3.1 指標與函數引數 指標變數引數原型宣告 void dosome(ptype *); void dosome(ptype *pt); 指標變數引數宣告, * 表示 pt 為指標變數 2 1 << 範例:指標算術運算 範例:函數引數 >>
10.3 指標與函數 |範例:函數引數 10.3.1 指標與函數引數 原型宣告接受指標變數引數 p 為指標變數 3 2 1 << 函數的指標類型引數宣告 範例:函數引數 >>
10.3 指標與函數 |範例:函數引數 10.3.1 指標與函數引數 &a 5 4 參數 *p(位址,值) : 37814108, 100 3 2 1 << 範例:函式引數 範例:函式引數 >>
10.3 指標與函數 |範例:函式引數 10.3.1 指標與函數引數 &b 5 4 參數 *p(位址,值) : 37814104, 200 3 2 1 範例:「指標變數」傳址 >> << 範例:函數引數
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 << 範例:函數引數 範例:「指標變數」傳址 – 傳址圖示 >>
10.3 指標與函數 |範例:「指標變數」傳址 – 傳址圖示 10.3.2 指標變數的傳址行為 2 1 << 範例:「指標變數」傳址 範例:計算正方型面積 >>
10.3 指標與函數 |範例:計算正方形面積 10.3.2 指標變數的傳址行為 area => 16x16=256 請輸入正方形邊長(cm): 長度 16 cm 的正方形,面積等於 256 cm^2 16 area 16 7 6 5 4 3 2 1 << 範例:「指標變數」傳址 – 傳址圖示 回傳指標函數宣告 >>
10.3 指標與函數 |回傳指標函數宣告 10.3.3 回傳指標 配置 「*」 即可讓函數本身回傳指標 typename *funname(type1,…) ; // 函數原型宣告 typename *funname(type1 arg,…) // 函數定義 { … return p ; } return 的 p 必須是指標 2 1 << 範例:計算正方形面積 範例:回傳指標 >>
10.3 指標與函數 |範例:回傳指標 10.3.3 回傳指標 2 1 << 回傳指標函數宣告 範例:回傳指標 >>
10.3 指標與函數 |範例:回傳指標 10.3.3 回傳指標 a(位址,值):37814072,10 10 8 7 6 5 4 return &x ; 37814072 3 37814072 2 1 << 範例:回傳指標 「指標變數」的位址 >>
10.4 雙重指標 |「指標變數」的位址 pt 變數 x *pt 022FF74 200 022FF74 022FF74 022FF74 022FF70 &x &pt 4 3 2 1 << 範例:回傳指標 範例:「指標變數」位址 >>
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 <<「指標變數」的位址 雙重指標 >>
10.4 雙重指標 |雙重指標 ppt 變數 X pt 022FF70 022FF74 1000 022FF70 022FF70 022FF74 022FF74 2 1 << 範例:「指標變數」位址 雙重指標變數宣告 >>
10.4 雙重指標 |雙重指標變數宣告 配置 「**」 宣告雙重指標 int **dpt ; dpt = &pt ; pt 是一般的「指標變數」 2 1 << 雙重指標 範例:雙重指標 >>
10.4 雙重指標 |範例:雙重指標 dpt pt x 022FF70 022FF74 1000 022FF70 022FF74 5 4 3 2 1 << 雙重指標變數宣告 範例:雙重指標 >>
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 << 範例:雙動指標 |