指针的运算虽然在开发iOS时运用的很少,但是身为开发者还是需要了解的,尤其是面对面试....
指针:
int *p 代表着 名为p的指针是指向int类型
指针p + 1 说明内存地址会加上4个字节(因为是int占4个字节)
如果是 double *p 指针p + 1内存地址会加上8个字节(因为是double占8个字节)
所以公式为:
指针p + n = p当前的地址值 + n *指向类型所占用的字节数
指针p - n = p当前的地址值 - n * 指向类型所占用的字节数
现在我们来看一道面试题:
请问会输出什么?
我想好多人会说,输出是“1”
但是
为什么会输出4呢?我们来分析一下
1.首先,&arrayName是个什么东西呢?&arrayName是数组的地址,也是数组首元素的地址
2.这个arrayName数组占多少字节呢,因为有4个int类型的元素,所以占16个字节
3.&arrayName + 1 就相当于在&arrayName的地址上加16个字节(看最上面的公式)
4.因为&arrayName 目前在第4个字节的位置,加上16个字节,目前来到了20个字节的位置
5.计算完“&arrayName + 1”之后,又转为“int * ”类型的p,然后算(p-1)
6.这时候int类型已经只占4个字节了,还是套公式,-1相当于减去4个字节,变成为16个字节的位置
7.输出的*(p - 1)值为4
虽然这么写代码,在公司里会被乱刀砍死,但是其中的原理我们还是需要清楚的,牢记指针运算的公式即可。