首页 > 其他分享 >C语言中指针在数组的使用--摘自Micro_Frank

C语言中指针在数组的使用--摘自Micro_Frank

时间:2024-10-12 23:22:54浏览次数:1  
标签:-- Frank C语言 start numbers 数组 指针 ptr size

#include <stdio.h>
#include <stdint.h>

int main(void)
{
	//指针的算术运算
	int32_t numbers[] = {10, 20, 30, 40, 50, 60 ,70, 80, 90, 100};
	int32_t* ptr = numbers;   //无取地址符,也无数组下标,表示&numbers[0]
	//数组在内存中是连续的
	//0 -> 00000000090
	
	//所以只需要一个首地址就可以找到整个数组在哪里。
	
	//计算数组的大小
	size_t size = sizeof(numbers) / sizeof(numbers[0]);
	
	//size_t 用来定义 字节大小、下标INDEX 的整数类型(%zu),是32位
	
	//sizeof(numbers) 用来计算整个数组所占用的字节大小;
	//sizeof(numbers[0])用来计算第一个元素所占用字节的大小;
	
	printf("number数组的大小size = %zu\n\n",size);
	
	printf("数组原始数据\nnumbers[%zu] = {",size);
	for(int32_t i = 0;i < size;++i){
		if(i<size - 1){
			printf("%d, ",numbers[i]);
		}else{
			printf("%d",numbers[i]);
		}
		
	}
	printf("}\n\n");
	
	//使用指针加法移动指针
	puts("使用指针加法访问第五个元素: ");
	ptr += 4;  // ptr 储存的是numbers[0]的地址;*ptr 储存的是numbers[0]的值
	
	printf("numbers[5] = %d\n\n",*ptr);
	
	//使用指针减法回到第一个元素
	puts("使用指针减法回到第一个元素: ");
	ptr -= 4;
	printf("numbers[0] = %d\n\n",*ptr);
	
	
	//指针之间的减法计算距离
	int32_t* start_ptr = &numbers[0];
	int32_t* end_ptr  = &numbers[size - 1];
	
	//end_ptr - start_ptr  用ptrdiff_t(%td)类型表示
	printf("数组首尾之间的距离是: %td\n\n",end_ptr - start_ptr);
	
	//指针之间的比较
	puts("比较两个指针指向的元素:");
	if(start_ptr < end_ptr){
		puts("start_ptr 指向的元素在 end_ptr 之前\n");
	}  //指针之间比较的是地址的先后,用*数组存储的大小无关
	
	//使用指针遍历数组
	printf("使用指针遍历数组:\n外部指针遍历*p = { ");
	for(int* p = start_ptr;p < end_ptr;++p){
		printf("%d ",*p);
	}
	printf("}\n\n");
	
	//使用指针减法逐个访问数组中每个元素的反向顺序
	puts("使用指针减法逐个访问数组中每个元素的反向顺序:");
	printf("*p = { ");
	
	for(int32_t* p = end_ptr;p >= start_ptr;--p){
		if(p > start_ptr){
			printf("%d, ",*p);
		}else{
			printf("%d",*p);
		}
	}
	puts("}\n");
	
	//指针加减整数访问特定元素
	puts("指针加减整数访问特定元素:");
	int32_t third = 3;
	printf("第四个元素(使用加法),*(start_ptr+third) = %d\n\n",*(start_ptr+third));
		
	//回退到第三个元素
	puts("使用指针减法回退到第三个元素");
	printf("第三个元素(使用减法),*(start_ptr+third-1) = %d\n\n",*(start_ptr+third-1));
	
	//比较两个指针
	int* middle_ptr = &numbers[size / 2];
	puts("比较两个指针向量的位置:");
	
	if(middle_ptr > start_ptr){
		puts("start_ptr 指向的元素在middle_ptr 之前");
	}
	
	if(middle_ptr < end_ptr){
		puts("end_ptr 指向的元素在middle_ptr 之后");
	}
	
	
	return 0;
}

**代码中详细罗列了指针在数组中可能的使用情况,并不完整,整理自Micro_Frank。**

标签:--,Frank,C语言,start,numbers,数组,指针,ptr,size
From: https://www.cnblogs.com/hongxun-blogs/p/18461673

相关文章

  • 基于django+vue+Vue户籍管理系统【开题报告+程序+论文】-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景户籍管理作为国家行政管理的重要组成部分,是维护社会稳定、促进人口合理流动和保障公民权益的基础性工作。随着信息技术的飞速发展,传统的户......
  • 2024.10.12
    根据你提供的MyBatis配置文件,确实有一个小问题需要注意:驼峰命名配置你已将mapUnderscoreToCamelCase设置为注释(<!--<settingname="mapUnderscoreToCamelCase"value="true"/>-->),这意味着驼峰命名转换功能被禁用了。为了启用它,你需要取消注释并确保该设置的值为true。修......
  • 基于django+vue+Vue湖南特色农产品销售系统【开题报告+程序+论文】-计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景湖南,作为中国的一个农业大省,拥有丰富的特色农产品资源,如湘莲、临武鸭、安化黑茶等,这些农产品不仅品质上乘,而且承载着湖南深厚的文化底蕴。......
  • 最近发现几个免费下载视频资源的好网站
    嘿,朋友们!在这个互联网飞速发展的时代,看电影简直就像呼吸一样自然,随时随地都能来一场视觉盛宴。对于那些热爱电影的小伙伴们来说,找到一个资源丰富、画质清晰又不失趣味性的电影下载网站,简直就是发现了新大陆!接下来,就让我这个“互联网侦探”为大家揭秘几个超赞的免费电影下载站点吧,......
  • 如何创建SliverApp的效果
    文章目录1.概念介绍2.使用方法3.示例代码我们在上一章回中介绍了SliverGrid组件相关的内容,本章回中将介绍SliverAppBar组件.闲话休提,让我们一起TalkFlutter吧。1.概念介绍我们在本章回中介绍的SliverAppBar和普通的AppBar类似,它们的不同之处在于SliverApp......
  • 代码随想录Day24 | LeetCode 122. 买卖股票的最佳时机 II、LeetCode 55. 跳跃游戏、Le
    LeetCode122.买卖股票的最佳时机IIclassSolution:defmaxProfit(self,prices:List[int])->int:res=0foriinrange(1,len(prices)):res+=max(0,prices[i]-prices[i-1])returnresLeetCode55.跳跃游戏class......
  • Web前端开发入门学习笔记之CSS 39-40 --新手超级友好版- 文本颜色字体篇
       Foreword写在前面的话: 大家好,我是一名刚开始学习HTML的新手。这篇文章是我在学习html过程中的一些笔记和心得,希望能和同样在学习HTML的朋友们分享。由于我的知识有限,文章中可能存在错误或不准确的地方,欢迎大家在评论区提出建议和指正。我非常期待大家的反馈,以便我能......
  • 线性系统性能分析方法2——根轨迹法
    反馈控制系统的性质取决于闭环传递函数,只要求解出闭环系统的特征根,便能得到系统响应的变化规律。但对于3阶以上的系统求根比较困难。如果系统中有一个可变参数时,求根就更困难了。1948年,伊凡思提出了一种确定系统闭环特征根的图解法——根轨迹法。在已知开环零极点分布的基础上......
  • 线性系统性能分析方法1——时域分析法
    1.典型输入信号2.阶跃响应的时域性能指标c(t)=ct(t)+css(t)=暂态响应+稳态响应2.1暂态性能指标2.2稳态性能指标稳态误差ess:稳定系统误差的终值。即:3.一阶系统的时域分析凡是可用一阶微分方程描述的系统,称为一阶系统。T=RC,为时间常数。其典型传递函数......
  • PostgreSQL学习笔记十二:灾难防范与数据恢复
    在PostgreSQL中可以采取以下方法进行灾难恢复:一、定期备份物理备份使用pg_dump进行逻辑备份,它可以将数据库以SQL文本的形式导出。例如:pg_dump-Uusernamedbname>backup.sql。可以使用工具将备份文件存储到远程位置,如网络存储或云存储。使用pg_basebackup进......