函数中宏定义的标识符和被调函数中的变量一样时为什么会出错?是因为主调函数中的变量、被调函数中变量、宏定义的标识符相同的原因吗?
还是说其他的?
//错的
#include<stdio.h>
#define n 5
sort1(int a[],int n)
{
int i,j,t,flag;
for(i=0;i<n-1;i++)
{
flag=1;
for(j=0;j<n-1-i;j++)
if(a[j]<a[j+1])
{
t=a[j];a[j]=a[j+1];a[j+1]=t;
flag=0;
}
if(flag==1)
break;
}
return n;
}
sort2(int a[],int n)
{
int i,j,t,min;
for(i=0;i<n;i++)
{
min=i;
for(j=i+1;j<n;j++)
if(a[j]<a[min])
{
t=a[j];a[j]=a[min];a[min]=t;
}
}
return n;
}
int main()
{
int a[n]={34,45,23,12,67},i,j;
/*for(i=0;i<x;i++)
scanf("%d",&a[i]);*/
for(i=0;i<sort1(a,n);i++)
printf("%d ",a[i]);
printf("\n");
for(i=0;i<sort2(a,n);i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
//对的:
#include<stdio.h>
#define x 5
sort1(int a[],int n)
{
int i,j,t,flag;
for(i=0;i<n-1;i++)
{
flag=1;
for(j=0;j<n-1-i;j++)
if(a[j]<a[j+1])
{
t=a[j];a[j]=a[j+1];a[j+1]=t;
flag=0;
}
if(flag==1)
break;
}
return n;
}
sort2(int a[],int n)
{
int i,j,t,min;
for(i=0;i<n;i++)
{
min=i;
for(j=i+1;j<n;j++)
if(a[j]<a[min])
{
t=a[j];a[j]=a[min];a[min]=t;
}
}
return n;
}
int main()
{
int a[x]={34,45,23,12,67},i,j;
/*for(i=0;i<x;i++)
scanf("%d",&a[i]);*/
for(i=0;i<sort1(a,x);i++)
printf("%d ",a[i]);
printf("\n");
for(i=0;i<sort2(a,x);i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}