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

如何解决C++返回数组的函数出现非void类型无return语句警告

问题原因

你遇到的警告是因为sort函数的返回值类型声明为int,但整个函数体内没有返回任何整型值,不符合非void返回类型函数的语法要求。
另外说明:数组作为参数传入函数时本质是传递首地址,函数内对数组的修改会直接作用到原数组上,你当前main函数的逻辑完全不需要sort返回值就能正常运行。

修复方案

方案1:无需返回值(推荐,适配你当前代码逻辑)

直接修改sort函数的返回类型为void,不需要额外添加return语句,即可消除警告,修改后的函数头如下:

void sort(int a[], int n)

该方案下你的main函数逻辑无需任何调整,就能正常输出排序后的数组。

方案2:确实需要返回数组

C++不支持直接返回数组类型,你可以返回数组的首指针实现需求,修改点如下:

  1. 将sort函数的返回类型改为int*
  2. 在函数末尾添加return a;语句返回数组首地址
  3. 额外兼容性优化:你代码中int a[n];是C++标准不支持的变长数组写法,建议替换为动态内存申请避免不同编译器下的兼容问题

修改后的完整代码示例:

#include <bits/stdc++.h>
using namespace std;

int* sort(int a[], int n)
{
    int zeros = 0;

    for (int i = 0; i < n; i++)
    {
        if (a[i] == 0)
        {
            zeros++;
        }
    }
    int k = 0;
    while (zeros--)
    {
        a[k++] = 0;
    }
    while (k < n)
    {
        a[k++] = 1;
    }
    return a;
}

int main()
{
    int n;
    cout << "Enter the n value : ";
    cin >> n;
    // 替换变长数组为动态内存申请
    int* a = new int[n];

    cout << "Enter the array elements : ";
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];
    }

    int* res = sort(a, n);

    for (int i = 0; i < n; i++)
    {
        cout << res[i];
    }
    // 释放动态申请的内存
    delete[] a;
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:45:04