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

指针的介绍2前

1.数组名的理解

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9 };printf("&arr[0] = %p\n", &arr[0]);printf("arr     = %p\n", arr);return 0;
}

观察得到,数组名就是数组首元素的地址

但有2个例外:

1.

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9 };printf("%d\n", sizeof(arr));return 0;
}

如果在这段代码中,arr还是数组首元素的地址的话

那么打印结果就应该是48

但打印结果是36

注意到数组一共有 9 个 int型 的元素

数组的大小正好是36个字节

所以:sizeof(数组名)中,数组名代表的是整个数组

2.

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9 };printf("&arr[0] = %p\n", &arr[0]);printf("arr     = % p\n", arr);printf("&arr    = %p\n", &arr);printf("&arr[0]+1 = %p\n", &arr[0]+1);printf("arr    +1 = %p\n", arr+1);printf("&arr   +1 = %p\n", &arr+1);return 0;
}

 

上面的代码示意图如下:

 &arr[0] 、arr、&arr 拿到的地址相同

进行+1操作之后,

&arr[0] 、arr 都跳过4个字节,即跳过一个 int 型d的数组元素

说明它俩的指针类型相同

&arr 跳过 36 个字节,即跳过了一个数组

所以:&数组名 中, 数组名代表的是整个数组

总结:

(1)sizeof(数组名),sizeof中单独放数组名,这⾥的数组名表⽰整个数组,计算的是整个数组的⼤⼩, 单位是字节

(2)&数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址(整个数组的地址和数组⾸元素 的地址是有区别的)

(3)除此之外,任何地⽅使⽤数组名,数组名都表⽰⾸元素的地址

2.[]下标引用操作符

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9 };int sz = sizeof(arr) / sizeof(arr[0]);for (int i = 0; i < sz; ++i)printf("%d", arr[i]);return 0;
}

打印数组元素时,使用了 [] 操作符

实际上,arr[i] 的本质是 *(arr + i)

所以就是用数组首元素的地址的移动来遍历数组

(arr + i) 与 (i + arr) 一致

所以

arr[i] == *(arr + i) == *(i + arr) == i[arr]

上述等式验证如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9 };int sz = sizeof(arr) / sizeof(arr[0]);for (int i = 0; i < sz; ++i)printf("%d ", arr[i]);printf("\n");for (int i = 0; i < sz; ++i)printf("%d ", *(arr+i));printf("\n");for (int i = 0; i < sz; ++i)printf("%d ", *(arr+i));printf("\n");for (int i = 0; i < sz; ++i)printf("%d ", i[arr]);return 0;
}

总结:

arr[i] 的本质是 *(arr + i)

数组元素的访问在编译器处理的时候,

是转换成⾸元素的地址+偏移量求出元素的地址,

然后解引⽤来访问的。

 3.一维数组传参的本质

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>void test(int arr[])
{int sz2 = sizeof(arr) / sizeof(arr[0]);printf("%d\n", sz2);
}int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9 };int sz1 = sizeof(arr) / sizeof(arr[0]);printf("%d\n", sz1);test(arr);return 0;
}

x86平台运行下:

x64环境下:

main函数中,sz1,毋庸置疑,是数组元素的个数

test 函数中, 我的初心也是求传入数组的元素个数

可不管是x64还是x86环境下,结果都不正确

仔细分析:

sz2 = sizeof(arr) / sizeof(arr[0])

sizeof(arr[0]) == 4

x86环境下

sz2 == 1,所以sizeof(arr) == 4

如果arr代表的是整个数组,那么sizeof(arr) == 36

显然arr代表的是数组首元素的地址,此时sizeof(arr) == 4

x64环境下

sz2 == 2,所以sizeof(arr) == 8

如果arr代表的是整个数组,那么sizeof(arr) == 36

显然arr代表的是数组首元素的地址,此时sizeof(arr) == 8

总结:

本质上,数组传参传递的是数组⾸元素的地址

相关文章:

指针的介绍2前

1.数组名的理解 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h>int main() {int arr[] { 1,2,3,4,5,6,7,8,9 };printf("&arr[0] %p\n", &arr[0]);printf("arr %p\n", arr);return 0; } 观察得到&#xff0c;数组名就是数组首…...

16.Word:石油化工设备技术❗【28】

目录 题目 NO1.2 NO3 NO4 题目 NO1.2 F12&#xff1a;另存为将“Word素材.docx”文件另存为“Word. docx”&#xff08;“docx”为文件扩展名&#xff09; 光标来到表格上方→插入→形状→新建画布→单击选中→格式→高度/宽度&#xff08;格式→大小对话框→取消勾选✔锁定…...

Python-基础环境(01) 虚拟环境,Python 基础环境之虚拟环境,一篇文章助你完全搞懂!

Python的虚拟环境是一种工具&#xff0c;它能够创建一个隔离的独立Python环境。每个虚拟环境都有自己独立的Python解释器和安装的包&#xff0c;不会与其他虚拟环境或系统的全局Python环境发生冲突。虚拟环境特别适用于以下情况&#xff1a; 项目隔离&#xff1a;不同的项目可…...

Dest1ny漏洞库:用友 U8-CRM 系统 ajaxgetborrowdata.php 存在 SQL 注入漏洞

用友U8-CRM系统ajaxgetborrowdata.php存在SQL注入漏洞&#xff0c;文件多个方法存在SQL注入漏洞&#xff0c;未经身份验证的攻击者通过漏洞执行任意SQL语句&#xff0c;调用xp_cmdshell写入后门文件&#xff0c;执行任意代码&#xff0c;从而获取到服务器权限。 hunter app.n…...

java.sql.Date 弃用分析与替代方案

引言 java.sql.Date 是 Java 标准库中的一个类&#xff0c;它继承自 java.util.Date&#xff0c;主要用于在 Java 应用程序与数据库之间进行日期数据的传输。然而&#xff0c;随着 Java 语言的发展&#xff0c;java.sql.Date 以及其父类 java.util.Date 逐渐被认为存在设计缺陷…...

HarmonyOS:状态管理最佳实践

一、概述 在声明式UI编程范式中&#xff0c;UI是应用程序状态的函数&#xff0c;应用程序状态的修改会更新相应的UI界面。ArkUI采用了MVVM模式&#xff0c;其中ViewModel将数据与视图绑定在一起&#xff0c;更新数据的时候直接更新视图。如下图所示&#xff1a; ArkUI的MVVM模式…...

如何提高新产品研发效率

优化研发流程、采用先进工具、提升团队协作、持续学习与改进&#xff0c;是提高新产品研发效率的关键。其中&#xff0c;优化研发流程尤为重要。通过简化流程&#xff0c;减少不必要的环节和复杂性&#xff0c;企业可以显著提升研发效率。例如&#xff0c;采用自动化测试工具和…...

MongoDB平替数据库对比

背景 项目一直是与实时在线监测相关&#xff0c;特点数据量大&#xff0c;读写操作大&#xff0c;所以选用的是MongoDB。但按趋势来讲&#xff0c;需要有一款国产数据库可替代&#xff0c;实现信创要求。选型对比如下 1. IoTDB 这款是由清华大学主导的开源时序数据库&#x…...

JavaScript系列(46)-- WebGL图形编程详解

JavaScript WebGL图形编程详解 &#x1f3a8; 今天&#xff0c;让我们深入探讨JavaScript的WebGL图形编程。WebGL是一种基于OpenGL ES的JavaScript API&#xff0c;它允许我们在浏览器中渲染高性能的2D和3D图形。 WebGL基础概念 &#x1f31f; &#x1f4a1; 小知识&#xff…...

YOLO目标检测4

一. 参考资料 《YOLO目标检测》 by 杨建华博士 本篇文章的主要内容来自于这本书&#xff0c;只是作为学习记录进行分享。 二. 环境搭建 (1) ubuntu20.04 anaconda安装方法 (2) 搭建yolo训练环境 # 首先&#xff0c;我们建议使用Anaconda来创建一个conda的虚拟环境 conda cre…...

十三先天记

没有一刻&#xff0c;只有当下在我心里。我像星星之间的空间一样空虚。他们是我看到的第一件事&#xff0c;我知道的第一件事。 在接下来的时间里&#xff0c;我意识到我是谁&#xff0c;我是谁。我知道星星在我上方&#xff0c;星球的固体金属体在我脚下。这个支持我的世界是泰…...

【论文阅读笔记】“万字”关于深度学习的图像和视频阴影检测、去除和生成的综述笔记 | 2024.9.3

论文“Unveiling Deep Shadows: A Survey on Image and Video Shadow Detection, Removal, and Generation in the Era of Deep Learning”内容包含第1节简介、第2-5节分别对阴影检测、实例阴影检测、阴影去除和阴影生成进行了全面的综述。第6节深入讨论了阴影分析&#xff0…...

Android AOP:aspectjx

加入引用 在整个项目的 build.gradle 中&#xff0c;添加 classpath "com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.10" 可以看到测试demo的 gradle 版本是很低的。 基于 github 上的文档&#xff0c;可以看到原版只支持到 gradle 4.4 。后续需要使…...

前端【11】HTML+CSS+jQUery实战项目--实现一个简单的todolist

前端【8】HTMLCSSjavascript实战项目----实现一个简单的待办事项列表 (To-Do List)-CSDN博客 学过jQUery可以极大简化js代码的编写&#xff0c;基于之前实现的todolist小demo&#xff0c;了解如何使用 jQuery 来实现常见的动态交互功能。 修改后的js代码 关键点解析 动态添加…...

2025课题推荐——USBL与DVL数据融合的实时定位系统

准确的定位技术是现代海洋探测、海洋工程和水下机器人操作的基础。超短基线&#xff08;USBL&#xff09;和多普勒速度计&#xff08;DVL&#xff09;是常用的水下定位技术&#xff0c;但单一技术难以应对复杂环境。因此&#xff0c;USBL与DVL的数据融合以构建实时定位系统&…...

滑动窗口详解:解决无重复字符的最长子串问题

滑动窗口详解&#xff1a;解决无重复字符的最长子串问题 在算法面试中&#xff0c;“无重复字符的最长子串”问题是一个经典题目&#xff0c;不仅考察基础数据结构的运用&#xff0c;还能够反映你的逻辑思维能力。而在解决这个问题时&#xff0c;滑动窗口&#xff08;Sliding …...

第05章 11 动量剖面可视化代码一则

在计算流体力学&#xff08;CFD&#xff09;中&#xff0c;动量剖面&#xff08;Momentum Profiles&#xff09;通常用于描述流体在流动方向上的动量分布。在 VTK 中&#xff0c;可以通过读取速度场数据&#xff0c;并计算和展示动量剖面来可视化呈现速度场信息。 示例代码 以…...

MySQL的复制

一、概述 1.复制解决的问题是让一台服务器的数据与其他服务器保持同步&#xff0c;即主库的数据可以同步到多台备库上&#xff0c;备库也可以配置成另外一台服务器的主库。这种操作一般不会增加主库的开销&#xff0c;主要是启用二进制日志带来的开销。 2.两种复制方式&#xf…...

Cpp::IO流(37)

文章目录 前言一、C语言的输入与输出二、什么是流&#xff1f;三、C IO流C标准IO流C文件IO流以写方式打开文件以读方式打开文件 四、stringstream的简单介绍总结 前言 芜湖&#xff0c;要结束喽&#xff01; 一、C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是 …...

基于OpenCV实现的答题卡自动判卷系统

一、图像预处理 🌄 二、查找答题卡轮廓 📏 三、透视变换 🔄 四、判卷与评分 🎯 五、主函数 六、完整代码+测试图像集 总结 🌟 在这篇博客中,我将分享如何使用Python结合OpenCV库开发一个答题卡自动判卷系统。这个系统能够自动从扫描的答题卡中提取信…...

Redis可视化管理解决方案:AnotherRedisDesktopManager实战指南

Redis可视化管理解决方案&#xff1a;AnotherRedisDesktopManager实战指南 【免费下载链接】AnotherRedisDesktopManager &#x1f680;&#x1f680;&#x1f680;A faster, better and more stable Redis desktop manager [GUI client], compatible with Linux, Windows, Mac…...

Hunyuan-MT-7B入门必看:从环境配置到Chainlit前端调用完整实操手册

Hunyuan-MT-7B入门必看&#xff1a;从环境配置到Chainlit前端调用完整实操手册 混元翻译大模型Hunyuan-MT-7B在WMT25国际翻译大赛中表现惊艳&#xff0c;31种语言中30种获得第一名&#xff0c;堪称同尺寸模型中的翻译王者。本文将手把手带你从零开始&#xff0c;完成环境配置、…...

亚马逊Buy for Me代购服务全流程实测:从下单到收货的完整避坑手册

亚马逊Buy for Me代购服务实战解析&#xff1a;从入门到精通的完整指南 跨境购物早已不是新鲜事&#xff0c;但每次看到海外电商平台上那些国内买不到的好物&#xff0c;心里总免不了痒痒的。亚马逊最新推出的Buy for Me服务&#xff0c;或许正是解决这一痛点的钥匙。作为一名长…...

HDMI接口没声音?手把手教你用InfoFrame调试音频流(附Audio InfoFrame解析)

HDMI音频调试实战&#xff1a;用Audio InfoFrame精准定位无声问题 当4K显示器亮起而音响沉默时&#xff0c;工程师的调试噩梦就开始了。上周在调试一块定制开发板时&#xff0c;HDMI视频输出完美&#xff0c;但音频系统始终沉默——这不是简单的"线材接触不良"能解释…...

三菱现代自动擦窗机器人PLC软件:后发产品介绍及技术细节

三菱 现代自动擦窗机器人PLC软件 我们主要的后发送的产品有&#xff0c;带解释的梯形图接线图原理图图纸&#xff0c;io分配&#xff0c;组态画面 界面多种组态可供选择上周刚帮一个三菱现代贴牌擦窗机的小客户把新软件迭代完&#xff0c;顺便攒了一套带人话解释的梯形图、不…...

FlowState Lab问题排查大全:从依赖错误到显存溢出的解决方案

FlowState Lab问题排查大全&#xff1a;从依赖错误到显存溢出的解决方案 1. 引言 遇到技术问题时的挫败感&#xff0c;相信每个开发者都深有体会。特别是当你满怀期待地准备运行FlowState Lab时&#xff0c;突然蹦出的错误提示就像一盆冷水浇下来。别担心&#xff0c;这篇文章…...

第一次训练周赛I题分析

这题来解决的话需要我们思考怎么才能排序最多个&#xff0c;那么我们知道_是需要一个的&#xff0c;-是需要两个的&#xff0c;那么我们就让-放在_的左右边来排序试试呢&#xff1f;那么要是放在左右边左右各放多少呢&#xff1f;那不如就试试平均分配呢&#xff1f;那么想到这…...

【JupyterLab实战】构建跨平台AI算力监控仪表盘

1. 为什么需要跨平台AI算力监控&#xff1f; 在AI开发过程中&#xff0c;我们经常遇到这样的场景&#xff1a;模型训练到一半突然卡死&#xff0c;却不知道是GPU内存爆了还是CPU瓶颈&#xff1b;多卡并行时某张卡莫名其妙跑不满&#xff1b;昇腾芯片的温度报警频繁触发却找不到…...

DS1881对数型数字电位器I²C驱动详解

1. DS1881 数字电位器驱动深度解析&#xff1a;面向嵌入式系统的IC对数型精密控制方案1.1 器件本质与工程定位DS1881 是 Dallas Semiconductor&#xff08;后被 Maxim Integrated 收购&#xff09;推出的单通道 IC 接口对数型数字电位器&#xff0c;其核心价值不在于“可编程电…...

GLM-4.1V-9B-Base实战教程:跨境电商A+页面图像卖点自动提炼

GLM-4.1V-9B-Base实战教程&#xff1a;跨境电商A页面图像卖点自动提炼 1. 为什么需要自动提炼图像卖点 跨境电商卖家每天需要处理大量商品图片&#xff0c;传统人工标注方式存在三个痛点&#xff1a; 效率低下&#xff1a;一个运营人员每天最多处理50-100张图片成本高昂&…...