目录
一.前言
我们知道一个指针中存放的就是一个内存地址,那这个内存地址能否进行加减乘除的运算呢?
二.指针的步长
下面我们来看下面这段代码:
int a=1;
int* p=&a;
p+1;
这段代码中指针p进行了加一操作,是只对它的内存地址进行加一操作吗?
这就不得不提起我们指针步长的概念了,这里的步长就是指针移动一次的字节个数。由于我们这里定义的是int类型的指针,因此我们这里的p+1也就是移动了4个字节。
三.指针的运算
不同于普通变量,我们的指针并不是所有的运算都能进行。
在我们的指针中也分为有意义的操作和无意义的操作。其中有意义的操作又包括:指针跟整数进行加,减操作(每次移动N个步长);指针跟指针进行减操作(能够求出间隔步长)。
无意义的操作有:指针跟整数进行乘除操作,因为这些操作都会让指针的指向不明。
同时,指针跟指针进行加,乘除三个操作的时候也是无意义的。
在知道了哪些有意义,哪些无意义之后,我们就可以用代码来验证下有意义的操作,来让我们更好的掌握指针的运算。
int main(){
//首先定义一个数组
int arr[]={1,2,3,4,5,6};
//获取其中0索引的内存地址
int* p1=&arr[0];
//通过解引用符*来打印0索引的值
printf("%d\n",*p1);
//通过+1来实现步长的加一,使指针指向了数组的1索引
printf("%d\n",*(p1+1));