因為C是一種較低階的語言,常常需要用到記憶體的概念,因此常常會用到指標這玩意兒!!!
說到指標有很多人一直搞不清楚,我以前也是,不過我後來看了一些範例終於搞懂了~指標原來也很簡單
大家都知道,指標的宣告就是在前面加個 *
例如宣告 a 為指向整數的指標變數
int *a;
相信以上大家都知道,但以下的事情才是真相
我們宣告出來的 a 其實是一個指標(廢話)~
a 裡面放的東西是一個位址
也就是說你去做
printf ("%d", a );
顯示出來的是一個位址
如果還不清楚的話,以下的程式就讓你搞清楚
int a;
int *b = &a;
以上的寫法與以下相同
int a;
int *b;
b = &a;
都表示宣告一個整數變數a,宣告一個指向整數的指標b,將指標b指向a
其中 & 符號表示"取址"
記憶體配置圖舉例
0x00000010 | ||
0x00000014 | ||
0x00000018 | ||
a | 0x0000001c | unknown |
0x00000020 | ||
b | 0x00000024 | 0x0000001c |
0x00000028 | ||
0x0000002c | ||
0x00000030 | ||
0x00000034 |
這個詞相信大家比較有感覺
如果我要利用指標 b 取出 a 的值
printf("%d", *b);
ok~相信大家都了解了指標的使用方式
另外告訴大家如何讓指標跟陣列有關係
陣列其實就是指標,他們用法其實差不多
舉例
int a[10];//宣告一連串的記憶體
而a指的就是這個陣列的第一個位址a[0]
所以a[1]呢?
a+1就是a[1],因為指標的運算是看指標宣告的型態 在這裡a+1代表a的位址+ 1 個 integer size
那我們要怎麼利用指標把陣列中第二個元素的值取出來呢
printf("%d", *(a+1) );
如此一來指標的宣告、運算與取值都知道了~那就不用再怕指標囉~
全站熱搜
留言列表