2013年7月11日 星期四

Pointer in C


















圖1
pointer有3種pointer arithmetic
1) result: p指向a[3],q指向a[4]
2) result: p指向a[5],q指向a[7]














圖2
 &b[0] 和 b 一樣代表的是array b的第一個元素














多維陣列也可以想成是一維陣列,ex:第一種寫法
p指向第一個元素,接著一直向下指
多維陣列也是多個一維陣列組成,ex:第二種寫法
i 是row的index
p先指向第一行陣列,c[i]此時代表的是第一行陣列第一個元素的addr
p會先加完第一行所有列的元素在指向第二行

<P.s 1>
終止條件寫成 p< &c[NUM_ROWS][NUM_COLS]可能會有錯
因為c[NUM_ROWS][NUM_COLS]這一個元素已在array c預期的大小之外
因此他的addr可能是一個任意位址
若p的addr剛好小於此元素的位址就會造成錯誤。

<P.s 2>
while(*a!=0)
  a++;    //wrong
雖然 a 是 array name也可以當作指標,但不能assign 給 a 新的值
上述 a++指移動位址,因此錯誤
可以給一個 pointer指向a
再移動 p (assign p 新的值)
p=a;
while(*p!=0)
   p++;   //correct


全國推廣動物認領養平台串聯貼紙

全國推廣動物認領養平台串聯貼紙