指针的深入理解(四)

这节主要讨论sizeof和strlen的区别,以及一些理解题。

sizeof 求的是对象的大小,深入理解一点就是:这个对象,他一定有一块对应的内存空间。求的就是这一块内存空间。

strlen 只能用来求字符串, 求取的是字符串的长度。

sizeof是一个操作符, 并且是单目操作符。而strlen是一个函数,两者有着本质上的区别。

stlren求取字符串的方式是从一个基地址向后进行统计字符个数,直到遇到\0。而sizeof不会关注是否有\0,它只关注对象,对象对应的空间有多大, 结构就是多少。

这里有一些题:

sizeof(arr) : arr只有在两种情况下不是数组的首地址,一种情况就是sizeof运算符操作时,也就是这种情况,这总情况下arr代表的是整个数组, 是一个对象。另一种情况就是对数组名进行取地址,这个时侯的数组名也会发生改变,不再是首地址。

arr被操作符sizeof操作时,表示整个数组, 所以sizeof此时计算的是arr数组的整个空间大小。所以是3 * 4 == 12;

sizeof(arr + 1) : arr虽然在被sizeof操作符操作时代表整个数组, 但是arr + 1却是一个地址。可以理解为arr本身就是一个数组的首地址,可以进行整数加减运算,进行加一运算后仍是一个地址,这个时候的arr + 1只是一个地址,没有别的特别意义。所以sizeof此时计算的是一个地址的大小。而sizeof(地址)计算出来的结构由环境决定,32位下是4, 64位下是8。

sizeof(arr + 2) 和 sizeof(arr + 0)一样的道理。但是要注意sizeof(arr + 0)虽然加的是0,但是其本质上已经发生了变化。

下面再来看三个:

sizeof(*arr) : *arr也就是arr[0],代表的是arr数组里面的一个元素。对象是一个元素,而这个元素是int类型。故而sizeof求出来是4.

sizeof(arr[0])相同的道理。

sizeof(&arr) : 上面已经说过,arr只有在两种情况下表示的不是首地址(首地址是个常量,常量无法进行取地址),一种sizeof,一种&arr, &arr的值仍旧是arr常量的值, 但是类型不同。arr常量的类型显而易见是int* 类型。而&arr类型是int (*) [3]类型。也就是说,&arr类型其实是一个数组指针。sizeof计算一个指针的值与环境有关, 32位环境下是4.64位环境下是8。

二维数组:

sizeof(str[0][0] ) : str[0][0]确认到了元素个体, char类型一个字节, sizeof计算结果是1。

sizeof(str)  : 在sizeof下代表整个数组。计算结果是16。

sizeof(str[0]) :是一次解引用。确认到了行, 拿到的是str第一行的首地址。那么问题来了, str解引用后拿到的第一行的首地址,代表的是第一行的数组整体呢?还是代表一个地址呢?

如果是代表这一行的整体, 那么结果就是一行的大小,也就是4.如果是一个地址, 在64位环境下就应该是8(我现在使用的是64位环境).而终端的结果现实的是4,证明这里即便拿到str第一行的首地址, 其实也被size当成了一个一维数组的整体。sizeof(*(arr + 1)) 的结果与其相同。

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

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

相关文章

面试了字节大模型算法岗(实习),快被问哭了。。。。

最近技术群组织了一次算法面试讨论会,今天分享的是一位小伙子的痛苦面试经历,如果你想加入我们的讨论群,见文末。 本次分享的内容如下: 应聘岗位:字节大模型算法实习生 面试轮数:第一轮 整体面试感觉&…

python封装的.exe文件是如何在cmd中获取.xml路径的?

这段日子搞项目算法封装,愁死我。来回改了三遍,总算把相对路径、绝对路径,还有cmd给.exe传参的方式搞懂了。 主要是这个语句 workspace sys.argv[1] sys.argv[]的作用就是,在运行python文件的时候从外部输入参数往文件里面传递参数。 外部就…

CTF盲水印工具:Blind-WaterMark安装

工具下载地址:GitCode - 开发者的代码家园 下载完毕后,只留这些东西就行 接下来需要安装两个依赖: opencv、matplotlib 直接pip install安装的话,工具使用会报错 所以需要到网站里挑选适合的版本进行安装 下载地址&#xff1…

项目:博客

1. 运行环境: 主机 主机名 系统 服务 192.168.223.129 Server_Web Linux Web 192.168.48.131 Server-NFS-DNS Linux NFS/DNS 2. 基础配置 配置主机名,静态IP地址 开启防火墙并配置 部分开启SElinux并配置 服务器之间使用同ntp.aliyun.com进行…

详讲api网关之kong的基本概念及安装和使用(二)

consul的服务注册与发现 如果不知道consul的使用,可以点击上方链接,这是我写的关于consul的一篇文档。 upstreamconsul实现负载均衡 我们知道,配置upstream可以实现负载均衡,而consul实现了服务注册与发现,那么接下来…

leetcode209长度最小的子数组|滑动窗口算法详细讲解学习

滑动窗口是一种基于双指针的一种思想,两个指针指向的元素之间形成一个窗口。 分类:窗口有两类,一种是固定大小类的窗口,一类是大小动态变化的窗口。 简而言之,滑动窗口算法在一个特定大小的字符串或数组上进行操作&…

DevEco Studio 保存自动格式化代码

目标:保存后自动格式化代码 单次快捷键:Ctrl Alt L 步骤一 步骤二

7.2、子集求和问题与背包密码系统

7.2、子集求和问题与背包密码系统 一、数学描述 1.1、第一种描述 20 世纪 70 年代末,默克尔和赫尔曼首次尝试将密码系统建立在一个 NP-完全问题上。他们使用了以下数学问题的一个版本,该问题是对经典knapsack问题的概括。 子集和问题 假设你有一个正…

【Midjourney】AI绘画案例(1)龙年吉祥神兽

说明: 1、文中图片版权均为Midjourney所有,请勿用作商业用途。 2、文中图片均经过 Upscale x 4 处理。 3、由于模型原因,某些图片存在暇玼。 1、吉祥神兽——天马(独角兽) 天马消灾星。 提示词 Prompt: Sky Unicor…

2023强网杯复现

强网先锋 SpeedUp 要求2的27次方的阶乘的逐位之和 在A244060 - OEIS 然后我们将4495662081进行sha256加密 就得到了flag flag{bbdee5c548fddfc76617c562952a3a3b03d423985c095521a8661d248fad3797} MISC easyfuzz 通过尝试输入字符串判断该程序对输入字符的验证规则为9…

Prometheus+grafana配置监控系统

使用docker compose安装 方便拓展, 配置信息都放在在 /docker/prometheus 目录下 1.目录结构如下 . ├── conf │ └── prometheus.yml ├── grafana_data ├── prometheus_data └── prometheus_grafana.yaml2.创建目录文件 mkdir /docker/prometheus &&am…

【unity小技巧】FPS简单的射击换挡瞄准动画控制

文章目录 射击动画控制换弹动画瞄准动画完结 射击动画控制 换弹动画 调用 瞄准动画 问题:瞄准时,但是动画会卡住,不会播放瞄准的待机动画 修改 调用 动画如果太快可以去修改播放速度 播放速度变慢了,可能导致切换待机动画也…

【PyQt】01-PyQt下载

文章目录 前言静态库 一、PyQt是什么?二、安装1.Windows环境下安装安装PyQt5Designer 2.Liunx环境下安装 总结 前言 拜吾师 PyQt5 快速入门 静态库 补充一点知识: Windows: .lib Linux: .a .so(动态库) 简单描述PyQt就是python调用C的Qt文…

《区块链简易速速上手小册》第4章:区块链与加密货币(2024 最新版)

文章目录 4.1 比特币与区块链4.1.1 比特币基础4.1.2 比特币交易的工作流程:4.1.3 拓展案例 1:闪电网络4.1.4 拓展案例 2:比特币ATM 4.2 其他主要加密货币4.2.1 加密货币的多样性4.2.2 以太坊的案例4.2.3 拓展案例 1:非同质化代币&…

郑庆科老师字体正版商用官方授权,字觅网为您提供官方授权渠道

近日,字觅网宣布成为郑庆科老师字体的签约字体品牌,并提供了官方正版商用授权渠道。庆科字体以其独特的风格和设计备受欢迎,现在通过字觅网,用户可以轻松获取该字体的正版商用授权。 用户只需访问庆科字体官网,即可查看庆科字体的详细列表,并选择所需字体进行下载。 在字觅网…

Unity3d Shader篇(一)— 顶点漫反射着色器解析

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、顶点漫反射着色器是什么?1. 顶点漫反射着色器的工作原理 二、编写顶点漫反射着色器1. 定义属性2. 创建 SubShader3. 编写着色器程序段4. 完成顶…

《Pandas 简易速速上手小册》第5章:Pandas 数据合并与重塑(2024 最新版)

文章目录 5.1 数据合并:Concatenate 和 Merge5.1.1 基础知识5.1.2 重点案例:客户订单数据合并5.1.3 拓展案例一:产品目录和销售数据合并5.1.4 拓展案例二:员工信息和部门数据合并 5.2 数据透视和重塑5.2.1 基础知识5.2.2 重点案例…

如何使用Cloudreve搭建私有云盘并发布公网访问无需购买域名服务器

文章目录 1、前言2、本地网站搭建2.1 环境使用2.2 支持组件选择2.3 网页安装2.4 测试和使用2.5 问题解决 3、本地网页发布3.1 cpolar云端设置3.2 cpolar本地设置 4、公网访问测试5、结语 1、前言 自云存储概念兴起已经有段时间了,各互联网大厂也纷纷加入战局&#…

路由重定向和别名

聚沙成塔每天进步一点点 本文内容 ⭐ 专栏简介1. 路由重定向实例场景:路由重定向的应用场景: 2. 路由别名实例场景:路由别名的应用场景: ⭐ 写在最后 ⭐ 专栏简介 Vue学习之旅的奇妙世界 欢迎大家来到 Vue 技能树参考资料专栏&…

备战蓝桥杯---数据结构与STL应用(进阶2)

本文将主要围绕有关map的今典应用展开&#xff1a; 下面我用图进行分析&#xff1a; 下面为AC代码&#xff1a; #include<bits/stdc.h> using namespace std; struct Point {int x,y;bool operator < (const Point & r) const {return x < r.x || ( x r.x &a…