You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言函数参数int tab[]的sizeof为8字节但int为4字节是什么原因?

原因解释

C语言有一条核心规则:数组作为函数参数传递时,会自动退化为指向数组首元素的指针。你代码中sum函数的形参int tab[],编译器处理时会完全等价为int *tab,所以函数内sizeof(tab)计算的是指针变量的大小,而非整个数组的大小。

对应输出的数值逻辑如下:

  • 你当前使用的是64位操作系统,64位系统下所有指针类型的长度固定为8字节,所以sizeof(tab)输出8。
  • 目前主流桌面系统中int类型的长度统一为4字节,所以sizeof(int)输出4。
  • 而main函数中直接对balls做sizeof运算时,balls还没有退化为指针,保留了原始数组类型,所以总大小为「元素个数×单元素大小」= 10×4 = 40字节,和运行结果一致。

正是因为数组形参会退化为指针,无法在被调函数内直接获取数组总长度,所以通常都会像示例代码一样额外传递一个参数记录数组元素个数,避免访问越界。

内容的提问来源于stack exchange,提问作者oskarfightingthecode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 05:09:03