iOS 指针与数组

介绍

本篇把数组和指针放在一块写是因为二者都牵扯到一个地址问题,讨论见如下篇幅。

数组

我们都知道数组的名字代表数组元素的首地址。因此我们在取数组值时可使用下标:

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);
复制代码

总结

因为数组名也即首地址,指针也是一个地址,因此操作上存在以上共性。