您的当前位置:首页正文

关于C语言中指针的运算

来源:要发发知识网

指针的运算虽然在开发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 * 指向类型所占用的字节数

现在我们来看一道面试题:

屏幕快照 2016-07-27 下午3.51.00.png

请问会输出什么?

我想好多人会说,输出是“1”

但是

屏幕快照 2016-07-27 下午3.53.32.png

为什么会输出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

虽然这么写代码,在公司里会被乱刀砍死,但是其中的原理我们还是需要清楚的,牢记指针运算的公式即可。