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

