介绍
本篇把数组和指针放在一块写是因为二者都牵扯到一个地址问题,讨论见如下篇幅。
数组
我们都知道数组的名字代表数组元素的首地址。因此我们在取数组值时可使用下标:
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
复制代码
因为拿到了数组首地址(数组名),我们同样可以使用地址偏移取值:
NSLog(@"%f",(*(arr + 1)).y);//输出1.200000
复制代码
指针
我们同样定义一个存储单元类型为CGPoint
的指针变量。并申请一块内存,代码如下:
CGPoint * p;
p = malloc(sizeof(CGPoint) * 2);
复制代码
因为下标的使用遵循以下规则:
a[b] 等价于 *(a + b)
复制代码
我们可向内存区域赋值:
p[0] = pointA;
p[1] = pointB;
复制代码
或者:
*(p + 0) = pointA;
*(p + 1) = pointB;
复制代码
这样我们就完成了赋值,取值仍然两种方式都可以:
NSLog(@"%f",p[1].y);
NSLog(@"%f",(*(p + 1)).y);
复制代码
使用完毕记得需要手动释放这块内存:
free(p);
复制代码
总结
因为数组名也即首地址,指针也是一个地址,因此操作上存在以上共性。