不過有些方法也可以透過指標處理得很乾淨,例如Swap
在這邊我大概把之前學得,指標和雙重指標以及三重指標大概寫上來,以免哪天忘記
指標顧名思義就是指標
指標的宣告方式就是在變數前頭加上*,例如:
int *ptr; int * ptr;
將變數加上&可取得到記憶體位置,例如:
int num = 100; int *ptr = #
以上面的例子來說,ptr就是指向num所在的記憶體位置,但ptr也會佔有相同大小的記憶體位置
ptr -> num
雙重指標也只是紀錄著指標以及指標指到的位置,例如:
int num = 100; int *ptr = # int **ptr2 = &ptr;
ptr2 -> ptr -> &num
三重指標也只是記錄著雙重指標內的位置,例如:
int num = 100; int *ptr = # int **ptr2 = &ptr; int ***ptr3 = &ptr2;
ptr3 -> ptr2 -> ptr -> &num
範例:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num = 100;
int *ptr = #
int **ptr2 = &ptr;
int ***ptr3 = &ptr2;
printf("num的值 \t%d\n", num);
printf("num的位址\t%p\n", &num);
printf("透過ptr取得到值 \t%d\n", *ptr);
printf("ptr指到num的位址 \t%p\n", ptr);
printf("ptr記憶體位址 \t%p\n\n\n", &ptr);
printf("透過ptr2取得到num值 \t%d\n", **ptr2);
printf("ptr2指到ptr位址 \t%p\n", *ptr2);
printf("ptr2指到ptr的記憶體位置 \t%p\n", ptr2);
printf("ptr2記憶體位址 \t%p\n\n\n", &ptr2);
printf("透過ptr3取得到num值 \t%d\n", ***ptr3);
printf("ptr3指到ptr位址 \t%p\n", **ptr3);
printf("ptr3指到ptr的記憶體位置 \t%p\n", *ptr3);
printf("ptr3指到ptr2的記憶體位置 \t%p\n", ptr3);
printf("ptr3記憶體位址 \t%p\n\n\n", &ptr3);
system("pause");
return 1;
}
執行結果:
用指標時切記要小心指到不該指的,雖然方便,不過在學習上當然還是會很抽象
有錯麻煩大神糾正,謝謝
參考資料:
http://www.slideshare.net/shademoon/08-3475335
http://blog.sina.com.tw/erzengel/article.php?pbgid=115834&entryid=613476
http://openhome.cc/Gossip/CGossip/DoublePointer.html
http://pydoing.blogspot.tw/2010/09/c-ch0611.html
http://nknucc.nknu.edu.tw/~jwu/c/cpgch4.htm
http://www.eskimo.com/~scs/cclass/int/sx8.html
http://stackoverflow.com/questions/5814646/c-double-pointer
http://nknucc.nknu.edu.tw/~jwu/c/cpgch4.htm
圖片資料:
http://ezgo.coa.gov.tw/graph/spots/H_CHINHUA_20081104173334/H_CHINHUA_20081104173334_general_000004s2.jpg
