本篇把數組和指針放在一塊寫是由於兩者都牽扯到一個地址問題,討論見以下篇幅。數組
咱們都知道數組的名字表明數組元素的首地址。所以咱們在取數組值時可以使用下標:bash
CGPoint pointA = CGPointMake(0.1, 0.2);
CGPoint pointB = CGPointMake(1.1, 1.2);
CGPoint arr[] = {pointA,pointB};
NSLog(@"%f",arr[1].y);//輸出1.200000
複製代碼
由於拿到了數組首地址(數組名),咱們一樣能夠使用地址偏移取值:spa
NSLog(@"%f",(*(arr + 1)).y);//輸出1.200000
複製代碼
咱們一樣定義一個存儲單元類型爲CGPoint
的指針變量。並申請一塊內存,代碼以下:指針
CGPoint * p;
p = malloc(sizeof(CGPoint) * 2);
複製代碼
由於下標的使用遵循如下規則:code
a[b] 等價於 *(a + b)
複製代碼
咱們可向內存區域賦值:內存
p[0] = pointA;
p[1] = pointB;
複製代碼
或者:get
*(p + 0) = pointA;
*(p + 1) = pointB;
複製代碼
這樣咱們就完成了賦值,取值仍然兩種方式均可以:string
NSLog(@"%f",p[1].y);
NSLog(@"%f",(*(p + 1)).y);
複製代碼
使用完畢記得須要手動釋放這塊內存:io
free(p);
複製代碼
由於數組名也即首地址,指針也是一個地址,所以操做上存在以上共性。class