C编译时出错

来源:百度知道 编辑:UC知道 时间:2024/05/29 23:35:26
程序如下:
#include<stdio.h>
void array(int list[],int k,int n){
int i;
if(k==n){
for(i=0;i<n;i++)
printf("%d ",list[i]);
printf("\n");
}
else for(i=k;i<n;i++){
swap(list,k,i);
array(list,k+1,n);
swap(list,k,i);
}
}
void swap(int list[],int k,int m){
int temp=list[k];
list[k]=list[m];
list[m]=temp;
}

int main()
{
int a[]={1,2,3,4,5};
clrscr();
array(a,0,5);
getch();
return 0 ;
}
编译时显示:
Error arrar.c 18:Type mismatch in redeclaration of 'swap'
实在是搞不懂????
原来是这样,忽略了一个小问题
实际上只要把void swap(int list[],int k,int m)和
void array(int list[],int k,int n)的定义交换一下就可以了:
但奇怪的是把void swap(int list[],int k,int m)修改成
int swap(int list[],int k,int m) 而不修改其他地方竟然也行

#include<stdio.h>
#include <iostream>
void swap(int list[],int k,int m);//函数使用前必须声明
void array(int list[],int k,int n){
int i;
if(k==n){
for(i=0;i<n;i++)
printf("%d ",list[i]);
printf("\n");
}
else for(i=k;i<n;i++){
swap(list,k,i);
array(list,k+1,n);
swap(list,k,i);
}
}
void swap(int list[],int k,int m){
int temp=list[k];
list[k]=list[m];
list[m]=temp;
}

int main()
{
int a[]={1,2,3,4,5};
system("cls");//clrscr?有这个函数?
array(a,0,5);
system("pause");
return 0 ;
}