三种指针运算:

三种指针运算:

1、指针 + - 整数;

2、指针-指针(指针减指针);

3、指针的关系运算;

1、指针 + - 整数;

(1)、指针+整数; 举例如下:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	int i = 0;
	int sz = sizeof(a) / sizeof(a[0]);
	int* p = &a;
	for (i = 0; i < sz; i++)
	{
		//printf("%d ", *(p + i));
		printf("%d ", *p);
		p = p + 1; //指针加1
		//p++;
	}

执行结果如下:

(2)、指针 - 整数;举例如下: 

//指针 - 整数
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	int i = 0;
	int sz = sizeof(a) / sizeof(a[0]);
	int* p = &a[9]; //p指针指向数组a第九个元素
	for (i = 0; i < sz; i++)
	{
		printf("%d ", *p);
		p = p - 1; //p指针-1
	}
	return 0;
}

执行结果如下:

2、指针-指针:

(1)、数组中指针减指针得到的是数组元素的个数; 举例如下:

int main()
{
	int a[6] = { 1, 2, 3, 4, 5, 6 };
	printf("%d\n", &a[6] - &a[0]);
	/*int* p = &a[6]-&a[0];
	printf("%d\n", p);*/
	
	return 0;
}

 执行结果如下:

 

指针-指针:

(2)、字符串数组中指针减指针得到的是字符串的个数; 举例如下:

 

//模拟strlen()函数,用指针的方式求字符串的长度
#include <stdio.h>
int my_strlen(char* str)//用字符指针p接收字符数组a的首地址,返回int类型
{
	char* start = str;//定义开始指针,指向字符元素的首地址
	char* end = str;//定义结束指针,遇到\0就结束
	while (*end != '\0') //*end等于'\0'后就跳出循环
	{
		end++;
	}
	return end - start;
}
int main()
{
	char a[] = "nice"; // n i c e \0
	int len = my_strlen(a); //传的是字符数组a的首地址
	printf("%d\n", len);
	return 0;
}

 

图解如下:

 

执行结果如下:

 

3、指针的关系运算;本质是比较指针的大小;

允许指向数组元素的指针与指向数组元素的最后一个元素的指针进行比较,
但不允许与指向数组元素的第一个元素之前的指针进行比较;

举例如下:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define LONG 5

int main()
{
	int a[LONG] = { 0 };
	int* vp;
	for (vp = &a[LONG]; vp > &a[0];)
	{
		*--vp=1;//先将指针vp-1,再解引用vp的值再赋值为1
		
	}
	
	return 0;
}

图解如下:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值