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

使用分治法求数组最大最小元素时函数原型&符号相关报错如何解决

问题原因

  • 核心问题:C语言原生不支持引用传递(int &min这种写法是C++专属语法),使用C编译器编译包含C++引用语法的代码会直接抛出该语法错误。
  • 额外问题:你的函数声明存在笔误,声明写法为void MinMaxDac(int arr[], int i, int j, int &min, int &min);,最后两个参数名重复,也是不符合语法规范的。

解决方法

将函数参数改成C语言支持的指针传递,即可实现修改外部变量的效果,对应修改函数声明、函数定义、函数调用三处写法即可。修改后的完整可运行代码如下:

#include <stdio.h>
#include <limits.h>
// 修改1:函数声明改为指针参数,同时修正参数名重复的问题
void MinMaxDac(int arr[], int i, int j, int *max, int *min);
int main()
{
    int len, max = INT_MIN, min = INT_MAX;
    printf("Enter the length of the array = ");
    scanf("%d", &len);
    int arr[len];
    for (int i = 0; i < len; i++)
    {
        scanf("%d", &arr[i]);
    }
    // 修改2:调用时传入max和min的内存地址
    MinMaxDac(arr, 0, len - 1, &max, &min);
    printf("Maximum element in the array = %d\n", max);
    printf("Minimum element in the array = %d\n", min);
    return 0;
}
// 修改3:函数定义改为指针参数,内部操作变量前需要解引用
void MinMaxDac(int arr[], int i, int j, int *max, int *min)
{
    //数组仅包含1个元素
    if (i == j)
    {
        if (*max < arr[i])
        {
            *max = arr[i];
        }
        if (*min > arr[i])
        {
            *min = arr[i];
        }
        return;
    }
    //数组包含2个元素
    if (j - i == 1)
    {
        if (arr[i] > arr[j])
        {
            if (*max < arr[i])
            {
                *max = arr[i];
            }
            if (*min > arr[j])
            {
                *min = arr[j];
            }
        }
        else
        {
            if (*max < arr[j])
            {
                *max = arr[j];
            }
            if (*min > arr[i])
            {
                *min = arr[i];
            }
        }
        return;
    }
    int mid = (i + j) / 2;
    //递归处理左子数组
    MinMaxDac(arr, i, mid, max, min);
    //递归处理右子数组
    MinMaxDac(arr, mid + 1, j, max, min);
}

如果你本身的开发目标是C++程序,不需要修改为指针写法,只要把源文件后缀改为.cpp,同时把函数声明里重复的min参数名改为max即可正常编译运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:57:03