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

C语言中将数组奇数按序存入另一数组并返回数量的问题排查

问题分析与修正

你的两段代码存在核心逻辑错误,以下是具体问题和修正方案:

关键问题拆解

  1. 新数组索引逻辑错误
    你直接复用原数组的索引i给odd_numbers赋值,会导致新数组出现大量未初始化的空位。比如原数组是[2,3,4,5],你的代码会把3存在odd_numbers[1]、5存在odd_numbers[3],而odd_numbers[0]和odd_numbers[2]会是随机垃圾值,完全不符合“按顺序存入新数组”的要求。

  2. 返回值计算错误
    C语言中数组作为函数参数会退化为指针,sizeof(array)/sizeof(array[0])计算的是指针大小与int大小的比值,和原数组长度、奇数数量都无关,这部分逻辑完全失效。

  3. 第二段代码逻辑完全偏离需求
    odd_numbers[i] += 1是给新数组对应位置的值加1,根本不是将原数组的奇数存入新数组,完全不符合功能要求。


修正后的代码

int CopySelected(const int array[], int size, int odd_numbers[])
{
    int count = 0; // 同时追踪新数组的索引和奇数数量
    for (int i = 0; i < size; i++) {
        if (array[i] % 2 != 0) {
            odd_numbers[count] = array[i];
            count++; // 每存入一个奇数,计数器自增
        }
    }
    return count; // 返回实际存入的奇数数量
}

验证示例

调用示例代码:

#include <stdio.h>

int main() {
    int arr[] = {1,2,3,4,5,6};
    int odds[10]; // 需确保新数组大小足够容纳所有奇数
    int num_odds = CopySelected(arr, 6, odds);
    
    printf("奇数数量:%d\n", num_odds);
    printf("奇数数组:");
    for (int i=0; i<num_odds; i++) {
        printf("%d ", odds[i]);
    }
    return 0;
}

输出结果:

奇数数量:3
奇数数组:1 3 5 

额外注意事项

  • 调用函数时必须保证odd_numbers的大小足够容纳原数组中所有奇数,否则会触发数组越界的未定义行为。
  • 如果需要兼容负数奇数的判断,(array[i] & 1) != 0比array[i]%2 !=0更严谨(C语言中负数取余结果为负,依然满足!=0,但位运算逻辑更直观)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 05:18:20