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

C语言提取数组值为1的下标并计算相邻元素差值存储问题

解决方案

1. 保存arr数组

你当前代码里的arr已经完整存储了所有index_x中值为1的下标,只要保留有效长度变量j即可:arr的前j个元素为有效数据,后续未赋值的元素无需关注,后续操作只要把遍历范围限制在0到j-1之间,就可以正常使用这些数据。

2. 生成差值数组

差值数组的长度固定为j-1:当收集到的有效下标数量j>=2时,差值数组长度就是有效元素数量减1;如果j<2,说明没有相邻元素可以计算差值。你可以直接按j-1的长度定义变长数组存储差值,不需要提前固定大小。


完整实现代码

#include <stdio.h>

int index_x[] = {0,0,1,0,1,0,0,0,1,0,0,1,0};      // 元素数量任意
int len = sizeof index_x / sizeof*index_x;

int main(void) {
    int arr[len];
    int j = 0;

    // 收集index_x中值为1的下标
    for (int i = 0; i < len; i++)
        if (index_x[i])
            arr[j++] = i;                     
    
    printf("收集到的1的下标:\n");
    for (int i = 0; i < j; i++)               
        printf("%d\n", arr[i]);

    // 处理差值计算逻辑
    if (j < 2) {
        printf("有效元素不足2个,无法计算相邻差值\n");
        return 0;
    }
    int diff_len = j - 1;
    int diff_arr[diff_len];
    for (int i = 0; i < diff_len; i++) {
        diff_arr[i] = arr[i+1] - arr[i];
    }

    // 输出差值数组
    printf("相邻元素差值数组:\n");
    for (int i = 0; i < diff_len; i++) {
        printf("%d\n", diff_arr[i]);
    }

    return 0;
}

兼容低版本C标准的可选方案

如果你的编译器不支持C99及以上版本的变长数组特性,可以改用动态内存分配创建差值数组:

// 替换int diff_arr[diff_len]; 为以下代码
int *diff_arr = (int *)malloc(diff_len * sizeof(int));
// 使用完差值数组后释放内存
free(diff_arr);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:48:03