9.4 数组的指针和指向数组的指针变量-1

news2025/1/18 14:59:33

9.4 数组的指针和指向数组的指针变量-1

  • 一.指向数组元素的指针变量的定义和赋值
  • 二.通过指针引用数组元素
    • 1.情况1
    • 2.情况2
    • 3.情况3
    • 4.情况4
    • 5.情况5
      • 注意事项:
    • 情况6:*p++ 优先级相同,并且都是从右到左的结合性,所以 *(p++)
    • 情况7: (*p)++ 表示p所指向的元素加1,如果p指向数组首地址,那么就等价于a[0]++,实际上是数组元素值+1,不是指针+1;
  • 三.学习网站

一.指向数组元素的指针变量的定义和赋值

数组指针 是指 数组的开始地址,数组元素的指针就是数组元素的地址
a[3] = 6; //下标法引用数组元素,也可以用指针
int a[5]; //能引用的是a[0]-a[4];
a[0] = 5;a[1] = 6; a[2] = 7; a[3] = 8; a[4] = 9;
在这里插入图片描述

int *p;   //指针变量,整型指针变量,和数组a类型相同。
p = &a[0];  //把a[0] 元素的地址赋给指针变量p,即p指向数组第0号元素;
p = a; //数组名代表数组的首地址

在这里插入图片描述
//定义指针变量时也可以给指针变量赋予初值

int *p = &a[0];

int *p;
p = &a[0];   // *p = &a[0];
int *P = a;

二.通过指针引用数组元素

1.情况1

*P =19; //a[0] = 19;
在这里插入图片描述

2.情况2

p = p +1; //增加了4,比如原来p = 1000, p = p +1后 p= 1004;

3.情况3

p =i 或者 a+i (i是数组元素的下标 0-4)
假如现在p指向数组首地址,a是数组名(代表数组首地址),那么p+i或者a+i就是数组元素a[i]的地址,也就是说,它们指向了数组a的第i个元素。
也就是说 p+3,和 a+3的值, &a[3],也就是都指向a[3], a+ 3*4 = 1012
在这里插入图片描述
结论:p+i 或者a+i,都是地址。既然是地址,就可以赋给指针变量。

*P = 19;   //a[0]
p = a +3;
*p = 13; //a[3]

4.情况4

(p+i) 或者 (a +i)
有了情况3,自然知道情况4,这两个是p+i或a+i所指向的数组元素,也就是a[i],比如
(p+2) 或者
(a+2)就是a[2];
*(p+3) = 18; //相当于a[3] =18;
*(p+2) = 190; //相当于a[2] =190;
在这里插入图片描述

5.情况5

p[i] (i是数组元素的下标0-4)
p[i]与 *(p+i) 等价,也就是跟a[i]等价
p[3] = 156; //等价于a[3] = 156
在这里插入图片描述
引用数组元素有很多方法:
a[i] ; p[i]; *(p+i); *(a+i);

演示实例:

int a[5];  //能引用的是a[0]-a[4];
int *p;
int i;
a[0] = 12;a[1] =14; a[2] = 20; a[3] = 18; a[4] = 50;


for(i = 0;i < 5;i ++)
{
    printf("%d\n",a[i]);
}

    printf("--------------------\n");

for(i = 0;i < 5;i ++)
{
    printf("%d\n",*(a+i));
}

    printf("--------------------\n");


for(p = a;p < (a+5);p ++)    //直接操作内存,效率最高
{
    printf("%d\n",*p);
}

注意事项:

1.a++不可用
2.*a[5] 按照 *(a+5)

p++:优先级相同,并且都是从右到左的结合,所以(p++)

情况6:*p++ 优先级相同,并且都是从右到左的结合性,所以 *(p++)

p++是先用后加,所以*(p++)整个作用是:得到p指向的变量的值(*p),然后再使p指针自加1,指向下一个数组元素;

int a[5];  //能引用的是a[0]-a[4];
int *p;
a[0] = 12;a[1] =14; a[2] = 20; a[3] = 18; a[4] = 50;
p = a;
printf("%d\n",*p++);   //打印a[0]的值,然后p指向了a[1];
printf("%d\n",*++p);   //打印a[1]的值,然后p指向了a[1]

情况7: (*p)++ 表示p所指向的元素加1,如果p指向数组首地址,那么就等价于a[0]++,实际上是数组元素值+1,不是指针+1;

(*P)++; //相当于a[0]++;
p++;
(*p)++; //相当于a[1]++;
p–; //又指回&a[0]
(*p) = 789; //a[0] = 789;

三.学习网站

整理至https://appd872nnyh9503.pc.xiaoe-tech.com/index的笔记

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/435057.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Maven(四):Maven的使用——java工程与Web工程

Maven&#xff08;四&#xff09;&#xff1a;Maven的使用&#xff08;中&#xff09; 前言一、实验四&#xff1a;创建 Maven 版的 Web 工程1、说明2、操作3、生成的pom.xml4、生成的Web工程的目录结构5、创建 Servlet5.1 在 main 目录下创建 java 目录5.2 在 java 目录下创建…

备受瞩目的南卡OE Pro上线!稳坐国内开放式蓝牙耳机TOP1,舒适音质双在线!

4月10号&#xff0c;国内专业资深声学品牌Nank南卡&#xff0c;将推出2023年度旗舰机——南卡OE Pro不入耳开放式蓝牙耳机&#xff0c;致力打造全新不入耳、不伤耳、安全健康佩戴体验&#xff0c;无论是音质体验还是佩戴舒适度&#xff0c;都完胜同行业不入耳开放式耳机&#x…

Ubuntu系统设置中文

在工作中有时候需要&#xff0c;设置系统编码为中文编码&#xff0c;记录一下配置中文编码的流程 ubuntu所需的安装包&#xff1a;(3条消息) linux中文编码locale资源-CSDN文库 date可以查看是否设置了中文编码 date 没有设置中文编码时是这样的显示格式 将包解压了&#xf…

美颜sdk的性能测试与优化技巧

在移动应用中&#xff0c;美颜功能已成为不可或缺的一部分。美颜sdk作为实现美颜功能的关键技术之一&#xff0c;其性能测试与优化显得尤为重要。本文将介绍美颜sdk的性能测试与优化技巧&#xff0c;希望能给您解答疑惑。 一、性能测试 1、常用性能指标 美颜sdk的性能测试主…

智慧医院微信小程序定制开发功能有哪些

无论是哪个时代&#xff0c;人们对于医疗资源的需求都没有消退过&#xff0c;尤其是随着经济条件的提高&#xff0c;人们也越来越关注健康问题。无论是生病就诊还是定期体检都要用到医疗资源。但是平时到医院好像什么时候都人满为患&#xff0c;排很长时间的队&#xff0c;不仅…

数字乡村振兴智慧农业整体规划建设方案2022(ppt可编辑)

项目建设需求 1、农业遥感应用&#xff1a;土地资源分布情况、农作物种植品类分析、作物种植面积监测及区域规划、农作物长势动态监测、农作物估产、病虫害的监测及预警。2、测土配方施肥系统&#xff1a;可查询到相关土地的土壤信息&#xff0c;如&#xff1a;土壤类型、养分…

【顺序表】

顺序表和链表 顺序表1. 函数声明部分2. 函数的实现部分&#xff08;1&#xff09;初始化&#xff08;2&#xff09;尾插&#xff08;3&#xff09;头插&#xff08;4&#xff09;尾删&#xff08;5&#xff09;头删&#xff08;6&#xff09;在pos位置插入x&#xff08;7&#…

【Python实战】入门级都能学懂的Python爬虫之仅需8行代码一键免费下载音乐,听歌自由真这么简单?

前言 据说互联网上 50%以上的流量都是爬虫创造的&#xff0c;也许你看到很多热门数据都是爬虫所创造的&#xff0c; 所以可以说无爬虫就无互联网的繁荣。 所有文章完整的素材源码都在&#x1f447;&#x1f447; 粉丝白嫖源码福利&#xff0c;请移步至CSDN社区或文末公众hao即…

C语言的深度解析

C语言的深度解析 C语言概述C语言内存管理C语言标准库 C语言概述 C是一种通用的、过程式编程编程语言&#xff0c;支持结构化编程、词法作用域和递归&#xff0c;使用静态类型系统&#xff0c;并且广发用于系统软件与应用软件的开发。 C语言具有高效、灵活、功能丰富、表达力强…

EMQX vs NanoMQ | 2023 MQTT Broker 对比

引言 EMQX 和 NanoMQ 都是由全球领先的开源物联网数据基础设施软件供应商 EMQ 开发的开源 MQTT Broker。 EMQX 是一个高度可扩展的大规模分布式 MQTT Broker&#xff0c;能够将百万级的物联网设备连接到云端。NanoMQ 则是专为物联网边缘场景设计的轻量级 Broker。 本文中我们…

基于MATLAB语音信号的数字滤波

MATLAB语音信号的数字滤波 一、实验目的 掌握使用 FFT 进行信号谱分析的方法设计数字滤波器对指定的语音信号进行滤波处理 二、实验内容 导入音频信号&#xff0c;并绘制出时域波形和频域波形&#xff1a; 可以看到&#xff0c;频谱上有很多额外的噪音频率&#xff0c;在…

智加科技与舍弗勒签订商用车先进转向系统量产合作协议,将率先量产行业首个正向开发的智能重卡冗余转向

自动驾驶已经成为当前汽车行业的重要发展趋势之一。在此背景下&#xff0c;在2023上海国际汽车展期间&#xff0c;智加科技与舍弗勒集团签订量产合作协议&#xff0c;双方将在自动驾驶商用车先进转向系统领域展开合作&#xff0c;共同推动重卡自动驾驶的技术应用和创新发展。 图…

用TrackEval评测自己的数据集

TrackEval库虽然很专业&#xff0c;但是设置路径很麻烦&#xff0c;于是我自己基于TrackEval简单写了个对评测自己数据集更友好的&#xff0c;仅限2DMOT数据集&#xff0c;可以评测多类别。 项目地址&#xff08;欢迎star&#xff01;&#xff09;https://github.com/JackWoo0…

第三十天 Maven高级(分模块设计、继承、聚合、私服)

目录 Maven高级 1. 分模块设计与开发 1.1 介绍 1.2实践 1.3 总结 2. 继承与聚合 2.1 继承 2.2 聚合 2.3 继承与聚合对比 3. 私服 3.1 场景 3.2 介绍 3.3 资源上传与下载 Maven高级 Web开发讲解完毕之后&#xff0c;我们再来学习Maven高级。其实在前面的课程当中&am…

camunda如何处理流程待办任务

在 Camunda 中处理流程任务需要使用 Camunda 提供的 API 或者用户界面进行操作。以下是两种常用的处理流程任务的方式&#xff1a; 1、通过 Camunda 任务列表处理任务&#xff1a;在 Camunda 任务列表中&#xff0c;可以看到当前需要处理的任务&#xff0c;点击任务链接&#…

数据库基础篇 《2. MySQL环境搭建》

1. MySQL的卸载 步骤1&#xff1a;停止MySQL服务 在卸载之前&#xff0c;先停止 MySQL8.0 的服务。按键盘上的 “Ctrl Alt Delete” 组合键&#xff0c;打开 “ 任务管理器 ” 对话框&#xff0c;可以在“ 服务 ” 列表找到 “MySQL8.0” 的服务&#xff0c;如果现在 “ 正…

SAP 生产订单自定义订单状态

1、生产订单通常系统有一整套订单状态&#xff0c;做PP的各位同学都应该知道。 CRTD状态 REL已下达 CNF已报工 DLV已入库 TECO技术性完成 等等状态这里就不在罗列了&#xff0c;可以自行在生产订单中看到 2、这篇文章主要是在生产订单系统外&#xff0c;在自定义一套状态。这个…

Win10系统下,蓝牙开关不见了怎么办

自从更新了Win10系统后&#xff0c;不少驱动人生的用户反馈&#xff0c;Win10系统中蓝牙开关突然不见了&#xff0c;无法连接蓝牙设备。驱动人生就为大家带来Win10系统下&#xff0c;蓝牙开关不见的解决方法。 方法一&#xff1a;检查蓝牙设备驱动程序 首先&#xff0c;检查蓝…

手把手教你 YOLOv8 添加注意力机制 | 适用于【检测任务】【分类任务】【分割任务】【关键点任务】| 20+ 种全打通!

YOLOv8 添加注意力机制 ! 注意力机制介绍 注意力机制(Attention Mechanism)源于对人类视觉的研究。在认知科学中,由于信息处理的瓶颈,人类会选择性地关注所有信息的一部分,同时忽略其他可见的信息。为了合理利用有限的视觉信息处理资源,人类需要选择视觉区域中的特定部…

skyWalking自动建表-逻辑梳理

skyWalking自动建表-逻辑梳理 使用skyWalking后&#xff0c;发现我们不需要创建表&#xff0c;启动skywalking会自动创建表&#xff0c;遂研究官方源码&#xff0c;感觉oap-server设计的自动建表功能很强大&#xff0c;并进行逻辑梳理&#xff0c;仅供参考。 源码地址&#xff…