C语言实现数组元素转为最大值与原元素差值功能异常排查
问题原因
代码存在两个核心错误:
- 最大值计算逻辑错误:当前的实现仅对比相邻的两个数组元素,每次比较后直接将
max覆盖为相邻两个元素的较大值,没有保留全局最大值,会导致最终求得的max不是整个数组的最大值。 - 数组修改逻辑失效:修改数组的
for循环末尾多了多余的分号;,导致循环体是空语句,循环执行结束后i的值等于数组长度size,后续执行的ptr[i] = max - ptr[i]属于数组越界操作,完全没有修改原数组的有效元素,这就是程序输出和输入完全一致的直接原因。
修复方案
修正最大值计算逻辑,同时删除循环末尾的多余分号即可,修复后的behind函数代码如下:
void behind(int *ptr,int size) { int i, max = ptr[0]; // 修正最大值计算逻辑:遍历全数组对比更新max for(i = 1; i < size; i++){ if(ptr[i] > max) { max = ptr[i]; } } // 删除for循环末尾的多余分号,让赋值语句成为循环体 for(i = 0; i < size; i++) { ptr[i] = max - ptr[i]; } }
验证说明
假设输入数组为[1,3,5,2,4],修复后程序会先求得全局最大值为5,最终输出数组为[4,2,0,3,1],符合需求。
内容的提问来源于stack exchange,提问作者sonicbuzz
相关产品推荐
相关产品推荐

