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

C语言实现数组反转时仅首个元素错误其余颠倒是什么原因?

问题代码错误说明
  • 数组反转右边界下标错误:C语言长度为n的数组合法下标范围是0 ~ n-1,代码中初始化j = n会直接访问越界内存array1[n],属于未定义行为。第一次交换时是array1[0]和越界的未知值交换,因此首个元素结果异常,后续j自减到n-1后进入合法下标范围,所以剩余元素反转正常。
  • 输入提示硬编码错误:代码中固定打印Enter the five numbers,和用户输入的数组长度n不匹配,输入非5长度的数组时提示内容错误。
  • 冗余头文件:引入了未使用的conio.h头文件,可直接删除。
常见for循环反转无变化的原因

如果用for循环实现反转后数组无变化,基本都是循环条件设置错误:如果循环次数超过数组长度的1/2,会把已经交换完成的元素再次交换回原位置,最终数组和初始状态一致。比如错误写为for(i=0;i<n;i++) 每次交换array1[i]和array1[n-1-i]就会触发该问题,正确循环条件应该是i < n/2,或者采用双指针同步移动的逻辑。

修正后的完整代码
#include<stdio.h>
int main()
{
    int temp;
    int i,n;
    printf("Enter value of n:");
    scanf("%d",&n);
    int array1[n];
    int k=0,j=n-1; // 修正右边界初始值
    printf("Enter the %d numbers\n",n); // 修正输入提示
    for(i=0;i<n;i++)
    {
        printf("Enter the number %d:",i+1);
        scanf("%d",&array1[i]);
    }
    printf("The array is:\n");
    for(i=0;i<n;i++)
    {
        printf("%d  ",array1[i]);
    }
    // while版本反转逻辑
    while(k<j)
    {
        temp=array1[k];
        array1[k]=array1[j];
        array1[j]=temp;
        j--;
        k++;
    }
    /* 等效for循环反转逻辑,替换上面while即可
    for(k=0,j=n-1;k<j;k++,j--) {
        temp=array1[k];
        array1[k]=array1[j];
        array1[j]=temp;
    }
    */
    printf("\nThe array after reversing is:\n");
    for(i=0;i<n;i++)
    {
        printf("%d  ",array1[i]);
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:45:04