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

为什么C++中数组在main与其他函数中sizeof计算结果不同

问题原因分析

你遇到的数值差异是C/C++的数组退化为指针规则导致的,你的猜测是正确的。

两个场景的sizeof计算逻辑

  • main函数中的计算:
    你在main内定义的int arr[5]是完整的栈上数组类型,编译器完整感知到它的长度信息,sizeof(arr)计算的是整个数组占用的总字节数:在int占4字节的常规环境下,结果为5*4=20。
  • func函数中的计算:
    C/C++规定,数组作为函数参数传递时,会自动退化为指向数组首元素的指针。你写的函数参数void func(int arr[])会被编译器等价处理为void func(int* arr),此处的arr是指针类型,sizeof(arr)计算的是指针本身的字节长度:32位环境下结果为4,64位环境下结果为8,和数组实际长度完全无关。

补充解决方案

如果需要在自定义函数内获取数组的完整大小,可以通过两种方式实现:

  1. 额外传递数组长度作为参数
void func(int arr[], int len){
    // 直接使用传入的len即可
}
// 调用时写为func(arr, sizeof(arr)/sizeof(arr[0]));
  1. 使用模板推导数组长度(仅适用于编译期可知长度的栈数组)
template<size_t N>
void func(int (&arr)[N]){
    cout<<"func size: "<<sizeof(arr)<<"\n"; // 此处输出和main内一致
    cout<<"array length: "<<N<<"\n"; // 可直接拿到元素个数N
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:57:01