因為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) );

如此一來指標的宣告、運算與取值都知道了~那就不用再怕指標囉~

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Yang 的頭像
    Yang

    Yang的學習筆記

    Yang 發表在 痞客邦 留言(0) 人氣()