关于指针的运算问题

指针的运算我们比较常见的有:
指针+-整数
指针+-指针
指针的关系运算
首先来看指针+-整数

#include <stdio.h>
#include <stdlib.h>
int main(){
	int arr[] = { 1, 2, 3, 4, 5};
	int* p = &arr[0];
	printf("%d\n",*(p + 1));
	system("pause");
	return 0;
}

这样的结果就为2.
指针+1,地址会跳过(后跳)一个元素,而地址会增加的数目和指针指向的元素类型相关.
指针-1是前跳一个元素。在使用指针-1时一定要注意数组越界的情况,比如上面的代买*p = &arr[0],这个时候*(p - 1)就会出现访问非法内存的情况。
这里还需注意的是,*(p + 1),与*p+1是不一样的,前面是指针+1之后再解引用,而后面是解引用在+1.
指针-指针

#include <stdio.h>
#include <stdlib.h>
int main(){
	int arr[10] = { 0 };
	int* p1 = &arr[0];
	int* p2 = &arr[5];
	printf("%p\n",p1);
	printf("%p\n",p2);
	printf("%d\n",p2 - p1);
	system("pause");
	return 0;
}

在这里插入图片描述
不难看出指针-指针表示的意思是两个地址之间差了多少个元素。
向上面这样的指针-指针是指向连续内存空间的,这样是有意义的(在数组中),但指针-指针通常情况下没有意义,比如下面这样

int num1 = 10;
int num2 = 20;
int* p1 = &num1;
int* p2 = &num2;
printf("%d\n",p2 - p1);

指针的关系运算
指针比较< > >= <=和指针相减类似,大部分情况下是没有意义的。只有当两个指针指向同一个连续的内存空间,此时比较才是有意义的。

猜你喜欢

转载自blog.csdn.net/weixin_44781107/article/details/89457496