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
相关产品推荐
相关产品推荐

