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

关于指针和指针算术

第一次读C++ primer plus 第六版时,关于指针的语法一些名词没有用心去理解,再读的时候,讲到指针算术这个词时,感觉之前读像是漏了很关键的点,这次读,写下关于指针算术的思考。

有漏了的感觉是,在进行指针变量自加,自减的时候,总是分不清是移动一个数组元素的距离还是移动整个数组的长度。

指针变量自加1,增加的量等于指针指向的类型的字节数。(这里就会说,指针指向的是数组,数组是复合类型,那么它移动的是不是整个数组的长度?其实不是,指是的它指向的具体元素的类型。其实这也说明,每个人对同一句话的不同理解,这就是导致混乱的原因。)

指针指向的是具体的元素,它没有数组的概念,眼里只有地址。

一般情况下,指针名和数组名是一样的。只在2个地方指针和数组名有区别

1、指针是个变量可以修改值,数组名是个常量,一但定义好,数组名指向的地址就不能修改了。

2、用sizeof计算长度时,指针名计算出来的是指针这个变量自己的长度(这里要理解一下),数组名就是整个数组的长度。

        举个例子:

                int a[10];

                int *pa=a;

                siteof(a)会是40;而sizeof(pa)=8;(假如int的长度是4字节。假如存储地址的长度是8字节)

还有一个有意思的事:数组名和对数组名取地址:

打印它们的值。这两个值从数字上看相等,都是数组第一个元素的地址,但意义就有点不一样了。

对数组名取地址,是得到的是整个数组的地址。

这个可能不好理解,但是在自加1到底移动多少字节时,就能体现出差异。

还是上面的例子,

a+1是移动4个字节,而&a+1是移动40个字节。(都是从同一个地址出发,第一个元素的地址)。

一个比较难理解的组合:int (*p)[20]。

        这里p到底指向什么?答案是:指向一个数组,这个数组包括20个元素。这里需要点时间理解。和int *p[20]的区别。

int a[20]这个好理解,就是一个数组。int *p = a,这个也好理解,就是指向数组的指针。

难理解是这两个:int *p[20]和int (*p)[20]。

        要理解这两个,需要知道优先级。[]的优先级高于*。所以,没有括号的时间p先和[]结合。所以,p是一个数组,数组里的元素是int *类型的指针。

        此时,再来理解int (*p)[20]。和int a[20]对比,可知(*p)=a。*p说明p是个指针,对p取值:*p,得到a,a是数组名,数组名是一个地址。说明p里面存储的是指向数组a的址址的地址。好像说的更有点绕了,不知道有没有更生动的例子,总之这种写法,就是*p=a了,用的时候用()括起来用,不会单独使用p。没有实际意义。

相关文章:

  • 开发常使用的团队协作工具
  • 再谈从视频中学习:从给视频打字幕的Humanoid-X、UH-1到首个人形VLA Humanoid-VLA:迈向整合第一人称视角的通用人形控制
  • 文本向量化
  • FastAPI + Redis Pub/Sub + WebSocket 组合解决方案的详细介绍
  • Redis01-基础-入门
  • 信创系统 sudoers 权限配置实战!从小白到高手
  • 引领印尼 Web3 变革:Mandala Chain 如何助力 1 亿用户迈向数字未来?
  • 刀客独家 | 潘胜接管百度移动生态市场部
  • 【Linux】Centos7 在 Docker 上安装 mysql8.0(最新详细教程)
  • 【嘉立创EDA】如何在更新或转换原理图到PCB时,保留已有布局器件
  • QML中的色彩应用
  • .dep 和.rpm有什么区别?
  • 马哥教育Linux云计算运维课程
  • 统信操作系统使用默认yum源安装 Docker 的踩坑
  • 2025通信会丨以创新技术赋能新型电力系统 锐捷知识大脑推动效率提升
  • markdown-it-katex 安装和配置指南
  • Dify框架面试内容整理-Dify如何处理知识库的集成?
  • 【Linux系统】详解Linux权限
  • maven相关概念深入介绍
  • 《2025全球机器学习技术大会:阿里云讲师张玉明深度剖析通义灵码AI程序员》
  • 美情报机构攻击中国大型商用密码产品提供商,调查报告公布
  • 人社部:我国劳动力市场潜力足,韧性强
  • 上海“生育友好岗”已让4000余人受益,今年将推产假社保补贴政策
  • 四川苍溪县教育局通报“工作人员辱骂举报学生”:停职检查
  • 首映|马丽:真想抱抱臧姑娘,对她说辛苦了
  • 应勇:以法治力量服务黄河流域生态保护和高质量发展