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

C++自定义数组最大索引查找函数运行结果不符合预期

问题原因

C/C++ 中数组作为形参传入函数时,会自动退化为指向数组首元素的指针,此时函数内部对形参array执行sizeof运算,得到的不是整个数组的总字节数,而是指针变量本身占用的字节数。
以64位环境为例:

  • 指针类型占8字节,double类型单个元素占8字节,因此函数内arraySize = sizeof(array)/sizeof(array[0])的计算结果为8/8=1
  • 循环仅会执行i=0的单次判断,maxIndex始终保持初始值0,最终返回结果为0

而把逻辑直接写在main函数中时,array是当前作用域内定义的完整数组类型,sizeof(array)可以正确获取整个数组的总字节长度:10个double元素共占80字节,计算得到的arraySize为10,循环可以遍历所有元素,因此能得到正确结果。

修复方法

不要在函数内部通过sizeof计算传入数组的长度,两种常用实现方案:

  • 传数组时额外把数组长度作为独立参数传入函数
  • C++环境下优先使用std::vector、std::array等标准容器,这类容器不会出现指针退化问题,可以通过内置方法直接获取容器长度

修正后的可运行代码:

#include <iostream>
using namespace std;

int findMaxIndex(double array[], int arraySize) {
    int maxIndex = 0;
    for (int i = 1; i < arraySize; i++) {
        if (array[maxIndex] < array[i]) {
            maxIndex = i;
        }
    }
    return maxIndex;
}

int main() {
    double array[10] = {11.20,22.2,33.3,43.4,55.5,66.6,77.7,88.8,90.0,100};
    int arraySize = sizeof(array)/sizeof(array[0]);
    cout << findMaxIndex(array, arraySize) << endl;
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:54:27