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

如何用指针初始化空C数组并正确返回两数之和问题的结果数组?

修复两数之和C语言代码的返回数组问题

你的代码存在的核心问题

  • 数组定义错误:main函数里int* nums[4]是指针数组,并非普通整数数组,应改为int nums[4]。
  • returnSize用法误解:题目中int* returnSize的作用是告诉调用者返回数组的长度(本题固定为2),不是用来存储结果的容器。你需要手动分配内存来存放找到的两个索引。
  • 循环逻辑缺陷:内层循环j从0开始会重复检查i=j的情况(即元素自身相加),且找到符合条件的索引后未终止外层循环,会继续遍历无效数据。应让j从i+1开始,避免重复计算。
  • 返回值错误:你需要返回自己分配的结果数组,而非returnSize指针。
  • main函数接收与打印错误:接收返回值的变量应为指针类型,打印时需输出结果数组的两个元素;free(myArray)中的myArray未定义,应释放返回的结果数组。

修正后的代码

#include <stdio.h>
#include <stdlib.h>

int* twoSum(int* nums, int numsSize, int target, int* returnSize) {
    // 告诉调用者返回数组的长度为2
    *returnSize = 2;
    // 分配能存储两个整数的内存空间
    int* result = (int*)malloc(sizeof(int) * 2);
    if (result == NULL) {
        // 内存分配失败时,将返回长度设为0并返回NULL
        *returnSize = 0;
        return NULL;
    }

    for (int i = 0; i < numsSize; i++) {
        // j从i+1开始,避免重复检查同一元素相加的情况
        for (int j = i + 1; j < numsSize; j++) {
            if (nums[i] + nums[j] == target) {
                result[0] = i;
                result[1] = j;
                // 找到结果后直接返回,终止所有循环
                return result;
            }
        }
    }

    // 未找到符合条件的数时,释放已分配内存,返回长度设为0并返回NULL
    free(result);
    *returnSize = 0;
    return NULL;
}

int main() {
    int nums[4] = {2,7,11,15};
    int numsSize = 4;
    int returnSize;
    int target = 9;

    int* result = twoSum(nums, numsSize, target, &returnSize);

    if (result != NULL && returnSize == 2) {
        printf("结果: %d, %d\n", result[0], result[1]);
        // 释放动态分配的内存,避免内存泄漏
        free(result);
    } else {
        printf("未找到符合条件的两个数\n");
    }

    return 0;
}

关键说明

  • 内存管理:用malloc分配结果数组的内存,确保返回的数组在main函数中可访问;使用完毕后必须用free释放,避免内存泄漏。
  • returnSize的正确用法:通过*returnSize = 2明确告知调用者返回数组的元素数量,未找到结果时将其设为0。
  • 循环优化:j从i+1开始,减少一半的循环次数,同时避免检查同一元素相加的无效情况(除非题目允许,否则两数之和默认要求两个不同元素)。

内容的提问来源于stack exchange,提问作者Bruna Naian Moreira Lima Garci

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 07:55:22