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

数组名的大小理解

在C语言中,sizeof(arr)的结果并不是数组的总大小,而是指针的大小。因此,n的值并不是数组的长度,而是指针的大小除以arr[0]的大小。

原因分析

  1. arr的类型

    • 在函数PrintArray中,arr是一个指向int的指针,即int *arr
    • 当你将数组作为参数传递给函数时,数组会退化为指向数组首元素的指针。因此,arr在函数内部是一个指针。
  2. sizeof(arr)的值

    • sizeof(arr)计算的是指针的大小,而不是数组的大小。
    • 在大多数现代架构中(如32位或64位系统),指针的大小通常是4字节(32位系统)或8字节(64位系统)。
  3. sizeof(arr[0])的值

    • arr[0]是一个int类型,sizeof(arr[0])的值通常是4字节(假设int占4字节)。
  4. 计算n

    • n = sizeof(arr) / sizeof(arr[0])
    • 如果是32位系统,sizeof(arr)为4字节,sizeof(arr[0])为4字节,因此n = 4 / 4 = 1
    • 如果是64位系统,sizeof(arr)为8字节,sizeof(arr[0])为4字节,因此n = 8 / 4 = 2

总结

n的值取决于系统的指针大小和int的大小:

  • 在32位系统中,n的值为1
  • 在64位系统中,n的值为2

正确的数组长度计算方法

如果你想在函数中获取数组的长度,需要将数组的长度作为参数传递给函数,例如:

void PrintArray(int *arr, int length)
{for (int i = 0; i < length; i++){printf("%d ", arr[i]);}
}

然后在调用时传入数组的长度:

int main()
{int arr[] = {1, 2, 3, 4, 5};int length = sizeof(arr) / sizeof(arr[0]);PrintArray(arr, length);return 0;
}

这样可以正确地在函数中处理数组的长度。

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

相关文章:

  • <b> 与 <span> 等行内元素添加 margin-top 或 margin-bottom 不生效问题
  • CarPropertyService 介绍
  • 【FAQ】spring boot 3 集成 nacos
  • pgsql 查看每张表大小
  • 创建vue项目
  • 3D Web轻量化引擎HOOPS Communicator实时协作功能深度解析
  • 小黑黑大模型应用日常摸索中:初次使用langchain智能体调用工具,准备继续深入
  • 题解——相交链表(力扣160 easy)
  • Java研学-MybatisPlus(三)
  • 磁盘管理练习题
  • 《Python基础》第1期:人生苦短,我用Python
  • Java基础 5.27
  • Oracle初识
  • 遗传算法简明指南:思路解析与C++实现
  • C++优先队列(priority_queue)使用详解
  • 计算机系统结构-第四章节-背诵
  • 使用Auto-Coder对js文件进行审计并修复漏洞1.3 1.4 1.5版本
  • BugKu Web渗透之Post
  • Python 实现简易版的文件管理(结合网络编程)
  • linux kernel 内存回收水位线调整方法
  • 第九章 Java基础-集合
  • 鸿蒙OSUniApp 制作简洁的用户个人中心页面#三方框架 #Uniapp
  • 【Springboot+LangChain4j】实现多轮对话,即记忆对话功能
  • v4.0 论文投稿-Latex论文投稿注意事项
  • 基于Alibaba Cloud Linux + 宝塔面板安装 LibreOffice 全攻略流程
  • 怎么实现pid隔离
  • 海信IP810N-72UB0贵州联通原机分区备份包
  • mysql 合集
  • TLE9893-2QKW62S新建Keil MDK工程
  • cursor使用mcp