指针运算
- 指针±整数
- 指针-指针
- 指针的关系运算
1.1指针±整数
首先,我们来聊聊指针加整数,来看看这个代码, 我将会详细分析。
#include <stdio.h>
#define N_VALUES 5
int main()
{
float values[N_VALUES];
float* vp;
for (vp = &values[0]; vp < &values[N_VALUES];)
{
*vp++ = 0;
}
return 0;
}
因为把N_VALUES定义为5,所以在float类型中,设置了一个values数组里面有五个元素。接下来看for循环,指vp指向了values的首元素地址,然后设置了一个范围就是指针vp小于取地址的第六个元素,为什么是六这是因为数组下标都是由零开始,012345,这几个数字刚好六个,在代码块中我们再解引用vp然后后置加加,接下来来画图解决问题。
接下来看看指针-整数的例子
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };
int* p = &arr[9];
printf("%p ", p);
printf("%p ", p - 1);
return 0;
}
打印结果是:
看这张图片可以知道,指针-1减去的是四个字节,在32位平台下,指针是四个字节,而在六十四位平台下则是八个字节
1.2 指针 - 指针
按照往常一样,来个代码例子看看: