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

C语言——指针(三)

📝前言:
上篇文章C语言——指针(二)中对:指针的运算指针变量类型对指针使用的影响开展了进一步的探讨,这篇文章我们继续学习一下指针与一维数组之间的关系
1,对数组名的理解
2,指针与一维数组

🎬个人简介:努力学习ing
📋个人专栏:C语言入门基础
🎀CSDN主页 愚润求学
🌄每日鸡汤:“海压竹枝低复举,风吹山角晦还明”

文章目录

    • 一,对数组名的理解
    • 二,指针与一维数组
      • 1,一维数组传参的本质
      • 2,指针访问一维数组
        • 1)用指针变量和指针运算符
        • 2)用指向数组的指针变量的移动

一,对数组名的理解

取地操作符(&)相信大家都不陌生,例如:

int arr[5]={1,2,3,4,5};
int*p = &arr[0]; //这里我们通过&arr[0]拿到了数组第一个元素的地址

但是,数组名(arr)其实本来就是地址,它代表的是数组首元素的地址
我们做个测试,运行下面代码观察结果:

int main()
{int arr[0] = { 1,2,3,4,5 };printf("&arr[0] = %p\n", &arr[0]); //%p是专门用来打印地址的printf("arr     = %p\n", arr);return 0;
}

在这里插入图片描述
我们可以发现:数组名打印出来的结果与&ar[0]一致,这就是因为:
数组名(arr)代表的是数组首元素的地址
但是,在下面两个情况下(数组名表示整个数组):
1,sizeof(数组名)
当数组名单独放在sizeof里面时,这里的数组名表示的是整个数组
2,&数组名
数组名和&相结合时,这里的数组名表示的是整个数组取出的是整个数组的地址
不妨看下面的测试:
测试一(sizeof(数组名)):
在这里插入图片描述
输出结果是20,就是因为这里的arr表示的是整个数组,sizeof计算了整个数组的大小:一共5个元素,每个元素是int类型,所以5*4==20。

测试二(&数组名):
在这里插入图片描述
输出结果:
在这里插入图片描述

我们发现arr与&arr输出的结果是一样的,但是,arr+1跳过了4个字节&arr+1却跳过了20个字节,这是因为:
&arr中的arr表示的是整个数组,取出的是整个数组的地址指针的类型是数组指针,因此+1就会一下子跳过整个数组,也就是20个字节(上一讲说到的指针类型会影响指针±整数所跳过的字节数)。

总结:
sizeof(数组名)和 &数组名中:数组名表示的整个数组
除两个特例外,其他情况下的数组名都表示数组首元素的地址

二,指针与一维数组

在前面学习的基础上,我们再来看看数组与指针间的奇妙联系!

1,一维数组传参的本质

假如,我们创造一个函数test,企图用test来实现在函数内部计算数组元素的个数,如下图:
在这里插入图片描述
输出结果:
在这里插入图片描述
我们发现:sz2的结果并不是我们想要的数组的元素的个数。
为什么同样一段用于计算数组元素个数的代码,在函数外部能实现,到了函数内部求数组元素个数就不行了呢?
这是因为:
数组名是数组首元素的地址,我们在传参时,传递的是数组名,传递的是首元素的地址。
也就是说test函数中sizeof(arr)/sizeof(arr[0])中的sizeof(arr)实现的其实是计算首元素的地址的大小,sizeof(arr[0])计算的是数组首元素的大小,因为我所使用的是x86环境,地址的大小是4个字节,所以:4/4得到了1。

总结:本质上,一维数组传参传递的是数组首元素的地址

void test(int arr[]) 参数上写成数组的形式,本质上还是指针
参数: int arr[] <==> int* arr (形式不同,本质相同)

2,指针访问一维数组

下面举例:

1)用指针变量和指针运算符

我们可以用指针变量和指针运算符实现访问数组
如下,用指针变量输入输出各数组的元素:

int main()
{int i, a[5], * p = a;//输入:for (i = 0; i < 5; i++){scanf("%d", p + i);}printf("\n");//输出:for (i = 0; i < 5; i++){printf("%4d", *(a + i));}printf("\n");return 0;
}

当我们输入1 2 3 4 5结果如下:
在这里插入图片描述
当我们输入时,随着i的变化,p+i所代表的地址也在变化,从而不断后移到数组其他元素的地址

2)用指向数组的指针变量的移动
int main()
{int i, a[5], * p = a;for (i = 0; i < 5; i++){scanf("%d",p++);}printf("\n");p = a;for (i = 0; i < 5; i++){printf("%4d", *p++);}printf("\n");return 0;
}

当我们输入1 2 3 4 5时,结果如下:
在这里插入图片描述
这里是通过p++指针变量自身的移动来实现:访问数组中不同地址的元素
●注意:printf(“%4d”, *p++);中 *p++ 的作用是:先输出指针指向的变量的值,然后指针变量加1

🌈我的分享也就到此结束啦🌈
要是我的分享也能对你的学习起到帮助,那简直是太酷啦!
若有不足,还请大家多多指正,我们一起学习交流!
📢公主,王子:点赞👍→收藏⭐→关注🔍
感谢大家的观看和支持!祝大家都能得偿所愿,天天开心!!!

相关文章:

C语言——指针(三)

&#x1f4dd;前言&#xff1a; 上篇文章C语言——指针&#xff08;二&#xff09;中对&#xff1a;指针的运算和指针变量类型对指针使用的影响开展了进一步的探讨&#xff0c;这篇文章我们继续学习一下指针与一维数组之间的关系&#xff1a; 1&#xff0c;对数组名的理解 2&am…...

VIR-SLAM代码分析3——VIR_VINS详解之estimator.cpp/.h

前言 续接上一篇&#xff0c;本本篇接着介绍VIR-SLAM中estimator.cpp/.h文件的函数&#xff0c;尤其是和UWB相关的相比于VINS改动过的函数&#xff0c;仍然以具体功能情况代码注释的形式进行介绍。 重点函数介绍 优化函数&#xff0c;代码是先优化&#xff0c;后边缘化。 …...

大模型的RPA应用 | 代理流程自动化(APA),开启智能自动化新纪元

随着技术创新的持续推进&#xff0c;自动化技术已经变得至关重要&#xff0c;成为驱动企业和社会向前发展的核心动力。在自动化的里程碑中&#xff0c;机器人流程自动化&#xff08;RPA&#xff09;已经有效地将简单、重复且规则性的任务自动化。可是随着对处理更为复杂、多变且…...

爬虫学习 异步爬虫(五)

多线程 多进程 协程 进程 运行中的程序 线程 被CPU调度的执行过程,操作系统 运算调度的min单位 在进程之中,进程中实际运作单位 from threading import Thread#创建任务 def func(name):for i in range(100):print(name,i)if __name__ __main__:#创建线程t1 Thread(target …...

【Openstack Train安装】六、Keystone安装

OpenStack是一个云计算平台的项目&#xff0c;其中Keystone是一个身份认证服务组件&#xff0c;它提供了认证、授权和目录的服务。其他OpenStack服务组件都需要使用Keystone来验证用户的身份和权限&#xff0c;并且彼此之间需要相互协作。当一个OpenStack服务组件接收到用户的请…...

java学习part22包装类

119-面向对象(高级)-包装类的理解_基本数据类型与包装类间的转换_哔哩哔哩_bilibili 1.包装类 2.基本转包装方式 2.1new方式 源码 2.2valueof&#xff08;&#xff09; 3.包装转基本 4.基本类型和包装类型的默认值不一样 比如boolean默认false Boolean默认null&#xff08;对…...

【场景测试用例】二维码

测试思路&#xff1a; UI 不同设备&#xff0c;不同浏览器下的外观和布局一致用户友好性 二维码足够清晰且大小合适是否有错误提示是否有扫描成功/失败提示启动&#xff0c;扫描过程 功能 验证识别功能 二维码完整且有效二维码失效二维码不完整/过于模糊空白二维码测试不同大小…...

如何提高销售技巧,增加客户的成交率?

如何提高销售技巧&#xff0c;增加客户的成交率&#xff1f; 在如今的市场环境中&#xff0c;销售技巧的高低往往决定了你是否能够成功地打动客户的心。想要提高销售业绩&#xff0c;除了产品质量和服务的保障&#xff0c;更需要你精进销售技巧&#xff0c;从而让客户愿意为你…...

软件设计之生成器模式

理解生成器模式在于&#xff1a;一个对象若由多个部分组成&#xff0c;只要构建好这些部分然后拼接到一起就组成了一个完整的对象。比如一台电脑&#xff0c;它的类型可以不一样&#xff0c;可以是苹果的&#xff0c;可以是联想的&#xff0c;等等。同一款电脑它的组件也不一样…...

【Vulnhub 靶场】【CEREAL: 1】【困难】【20210529】

1、环境介绍 靶场介绍&#xff1a;https://www.vulnhub.com/entry/cereal-1,703/ 靶场下载&#xff1a;https://download.vulnhub.com/cereal/Cereal.ova 靶场难度&#xff1a;困难 发布日期&#xff1a;2021年5月29日 文件大小&#xff1a;1.1 GB 靶场作者&#xff1a;Thomas…...

【Vulnhub靶机】Jarbas--Jenkins

文章目录 信息收集主机发现端口扫描目录爆破 漏洞探测whatwebhash-identifierwhatweb 文档说明&#xff1a;https://www.vulnhub.com/entry/jarbas-1,232/ 靶机下载&#xff1a;Download (Mirror): 信息收集 主机发现 扫描C段 sudo nmap -sn 10.9.75.0/24端口扫描 sudo nma…...

Java面向对象第8天

精华笔记&#xff1a; 接口&#xff1a; 是一种引用数据类型 由interface定义 只能包含常量和抽象方法 不能被实例化 接口是需要被实现/继承的&#xff0c;实现类/派生类&#xff1a;必须重写接口中的所有抽象方法 一个类可以实现多个接口&#xff0c;用逗号分隔。若又继承…...

数据结构与算法复习笔记

1.数据结构基本概念 数据结构: 它是研究计算机数据间关系&#xff0c;包括数据的逻辑结构和存储结构及其操作。 数据&#xff08;Data&#xff09;&#xff1a;数据即信息的载体&#xff0c;是能够输入到计算机中并且能被计算机识别、存储和处理的符号总称。 数据元素&#xf…...

关于微服务的思考

目录 什么是微服务 定义 特点 利弊 引入时机 需要哪些治理环节 从单体架构到微服务架构的演进 单体架构 集群和垂直化 SOA 微服务架构 如何实现微服务架构 服务拆分 主流微服务解决方案 基础设施 下一代微服务架构Service Mesh 什么是Service Mesh&#xff1f…...

计算机毕业设计 基于Web的课程设计选题管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…...

群晖NAS:docker(Container Manager)、npm安装Verdaccio并常见命令集合

群晖NAS&#xff1a;docker&#xff08;Container Manager&#xff09;、npm安装Verdaccio并常见命令集合 自建 npm 资源库&#xff0c;使用Verdaccio。如果觉得麻烦&#xff0c;直接可以在外网注册 https://www.npmjs.com/ 网站。大同小异&#xff0c;自己搭建搭建方便局域网…...

老师旁听公开课到底听什么

经常参加公开课是老师提升自己教学水平的一种方式。那么&#xff0c;在旁听公开课时&#xff0c;老师应该听什么呢&#xff1f; 听课堂氛围 一堂好的公开课&#xff0c;应该能够让学生积极参与&#xff0c;课堂气氛活跃&#xff0c;而不是老师一个人唱独角戏。如果老师能够引导…...

一文让你深入了解JavaSE的知识点

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …...

人体是否有清除hpv病毒能力?北京劲松HPV诊疗中心提出观点

​HPV&#xff0c;全称人乳头瘤病毒&#xff0c;是一种常见的性传播疾病&#xff0c;其症状包括尖锐湿疣、皮肤疣等。那么&#xff0c;人体是否有清除HPV病毒的能力呢?答案是肯定的&#xff0c;人体确实具有清除HPV病毒的能力。 首先&#xff0c;我们要了解HPV病毒是如何感染…...

Linux下~目录和home目录的区别

在 Linux 中&#xff0c;~&#xff08;波浪号&#xff09;路径和 home 路径都与用户的主目录&#xff08;home directory&#xff09;相关。 ~&#xff08;波浪号&#xff09;路径&#xff1a;表示当前登录用户的主目录。例如&#xff0c;如果你当前是以用户user1的身份登陆&am…...

2025届毕业生推荐的五大AI辅助写作平台横评

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 把人工智能生成内容的检测概率给降低&#xff0c;得从文本特征方面着手去进行系统性的优化。…...

ORA-12518:Oracle 监听程序无法分发客户端连接原因及解决方法

本文主要讲解ORA-12518:Oracle监听程序无法分发客户端连接的原因分析及解决方法。问题描述数据中台的同步任务有时会报错如下&#xff1a;ORA-12518, TNS:listener could not hand off client connection。意即Oracle监听程序无法分发客户端连接&#xff0c;原因分析只是有时候…...

YOLO26涨点改进| TPAMI 2026 |独家创新首发、Conv改进篇| 引入LPM 局部先验特征增强模块,更加聚焦于目标区域并抑制背景干扰,助力目标检测、图像分割、图像恢复、图像增强有效涨点

一、本文介绍 🔥本文给大家介绍使用 LPM 局部先验特征增强模块 改进YOLO26网络模型,通过构建重要性图对特征提取过程进行引导,使模型能够更加聚焦于目标区域并抑制背景干扰,从而提升特征表达质量和目标区分能力。其优势体现在能够有效增强关键区域信息、提升小目标和复杂…...

Vue-Weixin 朋友圈功能实现全解析:图片上传与点赞评论交互详解

Vue-Weixin 朋友圈功能实现全解析&#xff1a;图片上传与点赞评论交互详解 【免费下载链接】vue-weixin Vue2 全家桶仿 微信App 项目&#xff0c;支持多人在线聊天和机器人聊天 项目地址: https://gitcode.com/gh_mirrors/vu/vue-weixin Vue-Weixin 是一个基于 Vue2 全家…...

高效微信聊天记录管理:解决数据丢失风险的本地化方案

高效微信聊天记录管理&#xff1a;解决数据丢失风险的本地化方案 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeChat…...

ConsoleZ终极指南:10个技巧提升Windows终端生产力

ConsoleZ终极指南&#xff1a;10个技巧提升Windows终端生产力 【免费下载链接】console 项目地址: https://gitcode.com/gh_mirrors/conso/console ConsoleZ是一个功能强大的Windows终端增强工具&#xff0c;专为提升命令行工作效率而设计。作为Console 2的分支版本&am…...

多目标跟踪算法实战:从DeepSORT到Chained-Tracker的避坑指南

多目标跟踪算法实战&#xff1a;从DeepSORT到Chained-Tracker的避坑指南 在计算机视觉领域&#xff0c;多目标跟踪(Multi-Object Tracking, MOT)技术正逐渐从实验室走向工业界。不同于学术论文中那些理想化的测试场景&#xff0c;真实项目中的光照变化、遮挡干扰和计算资源限制…...

Git-RSCLIP多模态检索实战:输入‘干旱期农田龟裂纹理’召回匹配影像

Git-RSCLIP多模态检索实战&#xff1a;输入干旱期农田龟裂纹理召回匹配影像 1. 引言&#xff1a;当遥感图像遇上智能检索 想象一下这样的场景&#xff1a;你手头有成千上万张遥感图像&#xff0c;需要快速找到那些显示"干旱期农田龟裂纹理"的图片。传统方法可能需要…...

Visual C++运行库全解析:从问题诊断到高效部署的完整指南

Visual C运行库全解析&#xff1a;从问题诊断到高效部署的完整指南 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 问题诊断&#xff1a;运行库故障的典型表现与…...

终极优化指南:NodeSource Node.js 二进制分发版的 Docker 镜像体积与启动速度革命

终极优化指南&#xff1a;NodeSource Node.js 二进制分发版的 Docker 镜像体积与启动速度革命 【免费下载链接】distributions NodeSource Node.js Binary Distributions 项目地址: https://gitcode.com/gh_mirrors/di/distributions NodeSource Node.js 二进制分发版为…...