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

总结

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

转载于:https://juejin.im/post/5cfa03d151882502f9490e1e

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值