C语言中,数组首地址,数组元素首地址,数组名的区别

2023-11-09

目录

前言

一、什么是指针?

二、正式介绍

1数组名和数组首元素地址

2.arr和&arr的区别  ​    

总结


前言

刚刚接触指针,一直想搞明白数组首地址,数组元素首地址,数组名的区别,花了点时间还是搞懂了!




一、什么是指针?

其实指针就是地址,地址就是指针,简单来说,而指针变量就用来存储地址的变量

这里我就简单的引用菜鸟教程的一张图来说明

 当然指针变量的的类型也有很多,int float double。。。 等等

可以通过一个示例来了解一下

定义了一个int 型的变量和int 型指针变量, p =&a;的意思是指针变量p中存储的是a在内存中的地址,*p =a;   则表示则通过地址来获取a的值,所以输出10,而这个&p呢就是表示获取指针p的地址,是的一个存放地址的指针变量也是有地址的,而这个地址也是可以输出的

这只是指针的简单应用而已。



二、正式介绍




1.数组名和数组首元素地址

c语言中数组名的值其实和数组首元素的地址的值是相同的 ,也就是说arr是数组首元素的首地址(和&array[0]一样)   

arr这个名字其实就暗含了是一个地址,所以你可以看到第十行我在获取数组首元素地址时没有用到&取地址符号,直接就可以复制给一个指针变量

你也可以看到,pp储存的是arr的值,而pp1存储的是&arr[0]的地址值,两者的值是相等的 

而且你也可以看到我将p+1的值和pp2的值也是相同的,而pp2存储的是数组元素中的第二个元素的地址值,所以可以印证数组名就是数组首元素的地址,他们两者之间的值至少是相同的,更深入的我暂时还没有去深入的了解,有大佬直到可以告诉我一下!     

                                                                                                                                                                                                                                2.arr和&arr的区别  

    示例程序:

    

还是这个,可以看到&arr和arr和&arr[0]的值是相同的至少,但是虽然值是相同的,但是意义却不同 

arr数组名代表了数组首元素的地址和&arr[0] 是相同的

但是&arr的意思是整个数组的首地址,不是其中某个元素的地址!

不知道你有没有发现我将pp1,也就是数组首元素的地址值+1之后,下个地址值+4,你可能会有疑问了?,明明我加的是 1 ,但是为什么地址值会加 4 呢,其实这里的 1,不是我们理解的 1,他表示将数组首元素的地址在内存中向后移动一位,而int类型的所占字节为 4,所以他移动的是一个int型的字节的长度,此时pp1指向的就不是arr[0]了,而是arr[1]了

但是你有没有发现我将&arr+1后移动的却不是4了呢?

这个地址值之间的差值其实可以算一下,算出来是14 ,有人可能会有疑问了,既然是整个数组的地址,那么我+ 1,移动的应该是20呀(int*5)也就是加20才对,毕竟我将整个数组的地址整体向后移动一位,但是你有没有发现,我这里地址值是用16进制来表示的,所以我的20还需要转换为16进制表示的才行

                      





总结

如果数组首元素的地址是p,那么我这个p+1,就表示数组中首元素向后移动一位,移动的字节数根据具体的数据类型来决定

如果我的数组首地址(也就是整个数组的地址)是p,那么p+1,其实移动的是整个数组的长度,而且还需要考虑到地址的进制表示,如果是16进制的地址,还需要将10进制换算为16进制才行

arr数组名其实暗含了是一个地址,这个地址和数组首元素的地址是相同的,至于,arr和&arr[0]之间的区别我暂时还没有深入了解,有大佬知道的可以告诉我一声

本文作者水平有限,如有错误,还望不吝指正!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言中,数组首地址,数组元素首地址,数组名的区别 的相关文章

  • JAVA经典兔子问题

    有一对兔子 从出生第三个月起每个月都生一对兔子 小兔子长到第三个月后 每个月又生一对兔子 假如兔子都不死 问M个月时兔子的数量 很经典的斐波那契数列问题 记得第一次看到这道题是在一次比赛中 当时并不知道斐波那契数列 但是列出来几个月的兔子数
  • SQL 数据库中如何自动生成订单号

    有一张表TAB1 字段num num里有很多数字 我想从1开始 查到里面缺少的最小的一个数字 例如 4 5 6 8 9 11 12 13 这样的话我想要的结果是1 1 2 3 4 5这样的话 我想要的结果是6 其实利用正常排序的找第一个不正
  • open3d操作.ply文件(点云)

    读取 ply文件 import open3d as o3d pcd o3d io read point cloud ply path format ply ppoints np asarray pcd points pcolors np a
  • Ubuntu20.04编译安装openpose使用pythonAPI

    目录 项目地址 环境 准备 开始编译 项目地址 https github com CMU Perceptual Computing Lab openpose 环境 系统 ubuntu20 04 cuda 11 2 GPU 3090 2 Dr

随机推荐

  • 第一款中国人自主研发的普及型计算机高级编程语言

    最近有了比较大的技术突破 可以实现快速的开发环境了 我之前的计划一直是解析脚本来实现迈欧网的开发环境 有了这个技术 虽然是高级语言 但是却不会丧失性能 达到C 等语言的速度 甚至更快 希望朋友们支持我 你们的支持是我不间断开发此产品的动力
  • muduo启程

    muduo启程 muduo 是一个基于 Reactor 模式的现代 C 网络库 它采用非阻塞 IO 模型 基于事件驱动和回调 原生支持多核多线程 适合编写 Linux 服务端多线程网络应用程序
  • 使用广度优先搜索查找图中路径(java)

    package breadthfirstpaths import edu princeton cs algs4 Graph import edu princeton cs algs4 Queue import edu princeton c
  • Android四大组件之service(二)

    在 Android四大组件之service 一 文中我们讲到了 service 的 基本概念 和 startService 启动方式 stopService 不过这种方式是有个缺点 我们无法调用 FirstService 类里面的方法 这个
  • webStrom智能提示忽略首字母大小写问题

    Settings gt Editor gt Ceneral gt Code Completion gt Case sensitive completion 设置为None
  • vuex中的mutations的两种调用方法

    直接通过 store commit调用
  • Ubuntu14.04 安装ffmpeg

    一 xvid x264 ffmpeg源码下载 链接 https pan baidu com s 13phSFrLqkGrKDGF3 a2cSA 提取码 ls2s 二 安装 1 xvid tar zxvf xvidcore 1 3 3 tar
  • 一文带你看懂Spring事务!

    点击上方 方志朋 选择 设为星标 做积极的人 而不是积极废人 前言 Spring事务管理我相信大家都用得很多 但可能仅仅局限于一个 Transactional注解或者在XML中配置事务相关的东西 不管怎么说 日常可能足够我们去用了 但作为程
  • 677. 键值映射

    实现一个 MapSum 类 支持两个方法 insert 和 sum MapSum 初始化 MapSum 对象 void insert String key int val 插入 key val 键值对 字符串表示键 key 整数表示值 va
  • 面试之计算机网络

    计算机网络 1 路由选择协议 常见的路由选择协议有 RIP协议 OSPF协议 RIP协议 底层是贝尔曼福特算法 它选择路由的度量标准 metric 是跳数 最大跳数是15跳 如果大于15跳 它就会丢弃数据包 OSPF协议 底层是迪杰斯特拉算
  • IDEA 设置默认Maven的路径

    文件 新项目设置 构建工具 Maven 修改主路径
  • linux调整queue_depth,linux – 无法编辑/ sys / block / sdX / device / queue_depth文件

    我正在尝试使用以下命令增加SSD的队列深度值 echo 64 gt sys block sda device queue depth 但是我收到以下错误 bash echo write error Invalid argument 我尝试使
  • STM32CubeIDE HAL库操作IIC (一)配置篇

    目录 一 MX配置 使能中断 可选 DMA设置 可选 二 生成的代码 三 IIC通信的三种方式 Polling IT DMA 代码源自官方例程 1 Polling 常用 2 IT 开启中断 接收到数据时会调用回调函数 3 DMA模式 回调函
  • Qt 如何使用正则表达式 正则表达式 密码 email

    Qt 正则表达式 regular expression 详细用法查看此博客 https blog csdn net dongdong csdn article details 78574168 QRegExp regExpPsw 正则表达式
  • pytorch每日一学24(torch.quantize_per_tensor()、torch.quantize_per_channel())使用映射过程将tensor进行量化

    第24个方法 torch quantize per tensor input scale zero point dtype Tensor torch quantize per channel input scales zero points
  • 用JSP实现简单的四则运算

    用JSP实现简单的四则运算 作者 GGG166 首先定义一个Java的CompuerBean类放在beans包中用来计算两个数的四则运算 代码如下 作者 GGG166 package beans public class CompuerBe
  • 机器学习实战第一章——读书笔记

    数据挖掘 使用机器学习方法挖掘大量数据来帮助发现不太明显的规律 这称作数据挖掘 机器学习分类标准 一 有监督学习和无监督学习 1 有监督学习 提供带标签的训练集 k 近邻算法 线性回归 逻辑回归 支持向量机 SVM 决策树和随机森林 神经网
  • blender 渲染预览按钮不见了怎么办

    如果你在使用 Blender 时发现渲染预览按钮不见了 你可以尝试以下方法来解决这个问题 检查是否切换到了其他工作区 Blender 中有多个工作区 每个工作区都有自己的工具栏和面板 如果你切换到了其他工作区 渲染预览按钮可能不在屏幕上 检
  • 计算机网络基础知识--应用层协议HTTP、FTP、SMTP

    目录 1 HTTP 协议 HTTP 特点 HTTP 与HTTPS 的区别 HTTP 请求报文 HTTP 响应报文 2 FTP 协议 与TFTP 协议 FTP 协议 TFTP 协议 3 SMTP 协议 POP3协议与IMAP协议 SMTP协议
  • C语言中,数组首地址,数组元素首地址,数组名的区别

    目录 前言 一 什么是指针 二 正式介绍 1数组名和数组首元素地址 2 arr和 arr的区别 总结 前言 刚刚接触指针 一直想搞明白数组首地址 数组元素首地址 数组名的区别 花了点时间还是搞懂了 一 什么是指针 其实指针就是地址 地址就是