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

关于指针和指针算术

第一次读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。没有实际意义。

http://www.xdnf.cn/news/2364.html

相关文章:

  • [论文梳理] 足式机器人规划控制流程 - 接触碰撞的控制 - 模型误差 - 自动驾驶车的安全合规(4个课堂讨论问题)
  • 误触网络重置,笔记本电脑wifi连接不上解决方法(Win10,Win11通用)
  • JS-OCR-demo加载本地文件
  • 直播预告|TinyVue 组件库高级用法:定制你的企业级UI体系
  • 仿微信上传头像,实现拍摄、相册选择、手动缩放、裁剪、蒙版、撤回、还原、上传微信本地文件功能
  • 【C++】类和对象(上)
  • 【质量管理】TRIZ(萃智)的工程系统进化法则
  • GAEA情感坐标的技术架构与系统集成
  • 机器学习基础理论 - 分类问题评估指标
  • 【AI模型学习】GPT——从v1到v3
  • JavaScript输出数据的方法
  • 高并发架构设计之缓存
  • 快速上手 MetaGPT
  • 【Flutter】Flutter + Unity 插件结构与通信接口封装
  • 继续 那个错误分析
  • 机器学习-入门-线性模型(1)
  • 量子纠缠式架构:当微服务同时存在于所有节点时,CAP定理是否依然成立?
  • R中实现数值求导的包numDeriv
  • deepSeek浅谈对vue的mixin的理解,用于什么应用场景?
  • 探索DeepWiki:GitHub源码阅读的变革性工具
  • 从零构建云原生秒杀系统——后端架构与实战
  • Win10安装 P104-100 驱动
  • 衡量矩阵数值稳定性的关键指标:矩阵的条件数
  • Golang | 搜索表达式
  • 【c++】AVL树模拟实现
  • 从基础到实战的量化交易全流程学习:1.3 数学与统计学基础——概率与统计基础 | 基础概念
  • 深入详解人工智能数学基础—概率论-KL散度在变分自编码器(VAE)中的应用
  • 驯龙日记:用Pandas驾驭数据的野性
  • 《2025全球机器学习技术大会:阿里云讲师张玉明深度剖析通义灵码AI程序员》
  • prometheus手动添加k8s集群外的node-exporter监控