当前位置: 首页 > news >正文

指针的运用补充

 指针 +-整数

 不使用指针  输出1到10

#include <stdio.h>
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);
	for (i = 0;i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

 

使用指针的情况  (+)

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);//10
	int* p = &arr[0];

	for (i = 0; i < sz; i++)
	{
		printf("%d ", *(p + i));
	}

	return 0;
}

 

 (使用 -)倒着输出

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);//10
	int* p = &arr[sz-1];

	for (i = 0; i < sz; i++)
	{
		printf("%d ", *(p - i));
	}

	return 0;
}

 

指针 -  指针

1.指针-指针的前提是:两个指针指向同一块空间

2. 指针-指针得到两个指针之前的元素的个数

 

应用:

计算字符串的长度

一种

size_t my_strlen(char* p)  //自定义函数 
{
	size_t count = 0;  //计数
	while (*p != '\0')
	{
		count++;
		p++;
	}
	return count;

}
int main()
{
	char arr[] = "abcdef";   // a b c d e f \0
	size_t len = my_strlen(arr);    //储存 \0 前面的长度
	printf("%zd\n", len);
	return 0;

}

 

第二种

size_t my_strlen(char* p)
{
	char* q = p;
	while (*q != '\0')
	{
		q++;
	}
	return q - p;  //在C语言中,q-p具体指代的是指针p和指针q之间所指向的元素的个数
}
int main()
{
	char arr[] = "abcdef";   // a b c d e f \0
	size_t len = my_strlen(arr);    //储存 \0 前面的长度
	printf("%zd\n", len);
	return 0;
}

运算逻辑:

  • 使用 while 循环遍历字符串,条件是当前字符不等于 \0
  • 在循环体内,每次遇到一个字符时,将 len 加1,并将指针 str 移动到下一个字符。
  • 当循环结束时,len 的值即为字符串的长度。

具体分析: 

例如,如果pq都是指向int类型的指针,并且int在当前系统上占用4个字节,那么q-p的结果就是两个指针之间相差的字节数除以int类型的大小(即4字节),得到的就是两个指针之间所指向的int元素的个数。

具体来说,如果p指向数组a的第0个元素,而q指向数组a的第3个元素,那么q-p的结果就是3,表示q指向的元素在p指向的元素之后的第3个位置。反之,如果p指向数组a的第3个元素,而q指向数组a的第0个元素,那么p-q的结果就是-3,表示p指向的元素在q指向的元素之后的第3个位置。

注意事项:

需要注意的是,只有当两个指针指向同一个数组时,它们之间的减法操作才是合法的,并且结果是有意义的。如果两个指针指向不同的数组或不同的内存区域,那么它们之间的减法操作是未定义的行为,可能会导致不可预测的结果。 

 

 

 

 

 

 

 

相关文章:

  • linux | Vim 命令快捷操作
  • 基于HAproxy搭建负载均衡
  • 线程池详解:三大方法、七大参数、四大拒绝策略
  • 信号与系统第二章学习(七)
  • 【NetTopologySuite类库】geojson和shp互转,和自定义对象互转
  • Minikube+HyperV 踩坑记
  • 2025-03-06 学习记录--C/C++-PTA 习题6-6 使用函数输出一个整数的逆序数
  • linux应用:文件描述符、lseek
  • RAGflow 无法加载Embedding模型
  • Java阻塞队列深度解析:高并发场景下的安全卫士
  • AI绘画软件Stable Diffusion详解教程(7):图生图基础篇
  • 数字电路基础——逻辑门
  • 获取视频第一帧兼容ios
  • 数据库复习(第五版)- 第八章 存储过程
  • Docker save命令怎么用
  • 大型WLAN组网部署(Large scale WLAN network deployment)
  • PDF转JPG(并去除多余的白边)
  • Linux开启命令审计功能记录用户的每一步操作
  • python基础课程整理--元组的基础
  • 期望、方差和协方差
  • web 网页设计/优化公司哪家好
  • 建设网站方案 ppt/自媒体推广渠道
  • 旅游响应式网站建设/百度文库首页
  • 太原做网站公司5大建站服务/快速排名优化
  • 德国和俄罗斯和做视频网站/怎么做网站推广多少钱
  • 小程序定制开发网站/网络营销策划目的