news 2026/1/12 7:46:35

C语言学习——int* arr和int arr[]傻傻分不清楚

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言学习——int* arr和int arr[]傻傻分不清楚

接上篇二分查找,我在写的过程中,对于主函数arr传给二分查找函数时,又用的arr[ ]接收的,总没搞清楚。接下来捋一下这几个值。做个笔记,便于今后查找翻阅。

感谢b站各种视频,各种大佬的无私分享。

一、

首先解决:

原因:在创建数组时,int arr[10],[ ]里必须是一个常量,不可以是变量。计算机需要一个常量来分配内存空间,便于计算机内部给数组分配地址,所以在创建定义数组时,[ ]里必须是一个常量。在数组定义好后,后面需要使用时,就可以直接采用int n=10; arr[n]; 了。(如何理解呢?可理解为 数组的首地址已经知道了,类型也固定了,那么要通过地址找到某一个元素是很简单的)

ps:C99标准引入变长数组,第一张图片的代码是不会报错的。

二、

int* arr和int arr[ ]

首先明确数组名是可以表示首元素的地址的。但是,(1)当 sizeof(数组名) 时,这里的数组名表示整个数组,整体表达式计算的是整个数组的大小,单位是字节;(2)当 &数组名 时,这里的数组名也表示整个数组,取地址取出的是整个数组的地址。

通过例子我们来进行对比说明。

arr和arr+1对比&arr[0]和&arr[0]+1:

打印完全一模一样。arr是数组名,代表的是首元素的地址,arr[0]是数组的首元素,那么都是打印首元素的地址,确实应该是一样的,也就是验证了数组名就是表示首元素的地址。

arr对比&arr:

打印完全一模一样。根据上述(2)整个数组的地址也就是数组首元素的地址,没毛病。

arr对比arr+1:

差了4(打印的是十六进制),加1也就是加了一个与指针所指的类型的长度(一个int元素),指向了数组的下一个元素的地址。

&arr对比&arr+1:

差了40(一个int元素长度为4,十个就是40了),加1也就是加了一个与指针所指的类型的长度(一整个数组),因为&arr指的是一整个数组,所以其+1就直接跳过了整个数组。

arr+1对比&arr+1:

arr和&arr指的地址相同,也同为+1,但打印却不同了,就是因为它俩指的所代表的东西不一样。

以上都是一维数组举例。

二维数组也是类似的,但需注意:

最好把二维数组理解成为一维数组的数组

int arr[3][4]在内存中是这样存储的:

便于理解我们可以看成是:

+1的理解与一维数组方式一致。arr,arr+1非常容易搞错,一定要注意arr+1指向了第二行。

还需注意:

这里就很好的可以看作一维数组的数组,可以把arr[0](黄色部分)当做一维数组的数组名,也就是第一行数组的数组名,那么arr[0]+1就指向第一行的第二个。

验证:

可得出计算二维数组的行和列,分别为:

sizeof(arr)/sizeof(arr[0]) (48/16=3)

sizeof(arr[0])/sizeof(arr[0][0]) (16/4=4)

本集心得:

很有意思啊,多理解,理解了其实就本来理所应当是这样的了,就不会感觉在胡乱变来变去,要知道每个指针都指向的是什么,常看常新吧(中午刚捋完,晚上写的时候就又糊了哈哈)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/11 2:18:25

Godot资源解包技术深度解析:从PCK文件结构到自动化处理流程

Godot资源解包技术深度解析:从PCK文件结构到自动化处理流程 【免费下载链接】godot-unpacker godot .pck unpacker 项目地址: https://gitcode.com/gh_mirrors/go/godot-unpacker 本文深入探讨Godot引擎资源打包格式的技术原理,详细解析PCK文件的…

作者头像 李华
网站建设 2026/1/9 2:35:43

ROS2概念之分布式通信

智能机器人的功能繁多,全都放在一个计算机里,经常会遇到计算能力不够、处理出现卡顿等情况,如果可以将这些任务拆解,分配到多个计算机中运行岂不是可以减轻压力? 这就是分布式系统,可以实现多计算平台上的任…

作者头像 李华
网站建设 2025/12/26 20:21:34

LobeChat Bing搜索引擎优化

LobeChat 与 Bing 搜索引擎集成的技术实践 在今天,构建一个真正智能的对话系统早已不再只是“调用大模型 API”这么简单。用户期望的是能理解上下文、具备实时信息获取能力、并且可以无缝对接业务场景的 AI 助手。然而,大多数开源聊天界面仍停留在基础交…

作者头像 李华
网站建设 2025/12/26 21:22:39

终极WPS文档在线预览指南:快速集成完整教程

终极WPS文档在线预览指南:快速集成完整教程 【免费下载链接】wps-view-vue wps在线编辑、预览前端vue项目,基于es6 项目地址: https://gitcode.com/gh_mirrors/wp/wps-view-vue 在当今数字化办公环境中,文档在线预览已成为提升工作效率…

作者头像 李华
网站建设 2025/12/30 0:37:35

绝区零自动化脚本开发:10分钟快速上手指南

绝区零自动化脚本开发:10分钟快速上手指南 【免费下载链接】ZenlessZoneZero-OneDragon 绝区零 一条龙 | 全自动 | 自动闪避 | 自动每日 | 自动空洞 | 支持手柄 项目地址: https://gitcode.com/gh_mirrors/ze/ZenlessZoneZero-OneDragon 在游戏开发领域&…

作者头像 李华
网站建设 2025/12/27 13:59:23

3天掌握智能视频剪辑:AI工具让你的创作效率翻倍

作为一名内容创作者,我曾经每天花费数小时在视频剪辑上,直到发现了FunClip这款AI智能剪辑工具。从手动逐帧剪辑到AI自动识别精彩片段,我的创作效率实现了质的飞跃。今天就来分享如何用这款智能视频剪辑工具彻底改变你的创作流程。 【免费下载…

作者头像 李华