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

C语言自定义数组交换函数错误排查及无自定义函数交换方案咨询

原代码错误点
  • 函数参数类型不匹配:swap函数声明为int swap(int),接收的是int类型参数,但调用时传入的是数组名a,本质是int型指针,类型完全不匹配。同时函数定义时参数只写了int没有变量名,导致函数内部无法接收传入的数组。
  • 变量作用域错误:数组a是main函数的局部变量,swap函数没有访问权限,直接在swap里写a[0]、a[4]会报「未定义标识符a」的错误。
  • 返回值不符合声明:声明swap的返回值是int类型,但函数内部没有任何return语句,不符合语法要求。
  • 打印逻辑小问题:printf("%d",a[size])输出的数组元素之间没有分隔符,所有元素会连在一起显示,可读性差。
修正后的自定义函数实现
#include<stdio.h>
// 参数改为int数组类型,不需要返回值用void
void swap(int a[])
{
    int temp=a[0];
    a[0]=a[4];
    a[4]=temp;
}
int main()
{
    int size;
    int a[5]={10,20,30,40,50};
    // 打印原数组
    for(size=0;size<5;size++)
    {
        printf("%d ",a[size]);
    }
    printf("\n");
    swap(a);
    // 打印交换后数组
    for(size=0;size<5;size++)
    {
        printf("%d ",a[size]);
    }
    return 0;
}
不使用自定义函数的实现方法

完全可以不用自定义函数,直接在两次打印的中间写交换逻辑即可,代码如下:

#include<stdio.h>
int main()
{
    int size;
    int a[5]={10,20,30,40,50};
    // 打印原数组
    for(size=0;size<5;size++)
    {
        printf("%d ",a[size]);
    }
    printf("\n");
    // 直接在main里实现首尾交换
    int temp = a[0];
    a[0] = a[4];
    a[4] = temp;
    // 打印交换后数组
    for(size=0;size<5;size++)
    {
        printf("%d ",a[size]);
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:36:00