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

【C语言干货】一维数组传参本质

文章目录

  • 前言
  • 一、数组传参的本质
    • 1.数组名的退化
    • 2.两种等价的函数声明
  • 总结

前言


提示:以下是本篇文章正文内容,下面案例可供参考

一、数组传参的本质

1. 数组名的退化

在C语言中,当数组作为函数参数传递时,数组名会"退化"(decay)为指向其首元素的指针。这意味着:

  1. 无论函数原型中如何声明参数(int arr[]int *arr),编译器都会将其视为指针

  2. 函数内部接收到的实际上是一个指针变量,而不是整个数组

  3. 因此,sizeof操作符返回的是指针的大小,而不是数组的大小

2.两种等价的函数声明

以下两种函数声明在编译器看来是完全等价的:

c复制下载void func(int arr[]);  // 看似接收数组

无论采用哪种形式,函数内部得到的都是一个指针变量。第一种写法更多是为了代码的可读性,暗示这个指针应该指向一个数组。


总结

C语言这样设计有几个重要原因:

  1. 效率考虑:如果每次传递数组都要拷贝整个数组,对于大数组会非常低效

  2. 历史原因:C语言设计之初就注重效率和接近硬件的特性

  3. 灵活性:可以传递数组的一部分(如arr+5传递第6个元素开始的子数组)

相关文章:

  • 存储器:DDR和HBM的区别
  • AI视频生成的艺术:镜头语言
  • 【战略合作】开封大学_阀门产业学院+智橙PLM
  • 深入理解 Electron 的 IPC 通信机制:主渲染进程消息传递实战
  • 【论文+VLA】2505.GraspVLA——基于十亿级合成动作数据预训练的抓取基础模型(即将开源)
  • 【软件设计师:软件工程】9.软件开发模型与方法
  • python小记(十四):Python 中 **参数解包:深入理解与应用实践
  • WTK6900C-48L:离线语音芯片重构玩具DNA,从“按键操控”到“声控陪伴”的交互跃迁
  • WPF 子界面修改后通知到主页面
  • 一站式远程访问工具对比分析及选择建议
  • LeetCode:翻转二叉树
  • 使用OpenFOAM中的VOF模型仿真两相流
  • maven如何搭建自己的私服(windows版)?
  • Java 的 Monitor 机制:原理与源码详解
  • [git]如何关联本地分支和远程分支
  • 数据库的进阶操作
  • 路由器断流排查终极指南:从Ping测试到Wireshark抓包5步定位法
  • 基于GlusterFS的分布式存储集群部署实战指
  • System-V 共享内存
  • JavaScript中数组和对象不同遍历方法的顺序规则
  • 盖茨:20年内将捐出几乎全部财富,盖茨基金会2045年关闭
  • 两部上戏学生作品亮相俄罗斯“国际大学生戏剧节”
  • 2025江西跨境电子商务发展交流会召开,探索行业发展新趋势
  • AI智能体,是不是可以慢一点? | ToB产业观察
  • 驱逐行动再加码?特朗普或向利比亚和卢旺达遣送非法移民
  • 吴清:基金业绩差的必须少收管理费,督促基金公司从“重规模”向“重回报”转变