当我在swap函数中传递参数时,我期待索引a[0]
和a[1]
的输出。但输出分别显示a[1]
和a[2]
的数据。
但为什么呢?以及如何改进它?
以下是我的代码。
#include <stdio.h>
#include <stdlib.h>
int add(int *array,int max );
void swap(int *array,int max,int *x,int *y);
int main()
{
int sum,i,j=0,a[10],max;
scanf("%d",&max);
for(i=0;i<max;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<max;i++)
{
printf(" %d ",a[i]);
}
printf("\n");
//for(i=0;i<max;i++)
{
swap(a,max,&a[0],&a[1]);
}
sum=add(a,max); // array name is same as address of array//or sum=add(&a[0],max);
printf("%d",sum);
}
int add(int *array,int max)
{
int sum=0,i=0;
while(i<max)
{
sum=sum +array[i];
i++;
}
return sum;
}
void swap(int *a,int max, int *x,int *y)
{
int i;
/* int temp=0;
temp=a[*x];
a[*x]=a[*y];
a[*y]=temp;*/
printf("\n%d %d",a[*x],a[*y]);
for(i=0;i<max;i++)
{
printf("\n %d",a[i]);
}
printf("\n");
}
答案 0 :(得分:0)
您的问题在以下行
printf("\n%d %d",a[*x],a[*y]);
致电swap()
,如
swap(a,max,&a[0],&a[1]);
如果a[0]
或a[1]
的值大于10
,则表示您正在访问超出范围的数组。请检查并纠正您的逻辑。
FWIW,
但输出分别显示来自[1]和[2]的数据
这是因为,很可能a[0]
包含1
而a[1]
包含`2
答案 1 :(得分:0)
我试过,现在工作正常。谢谢
int add(int *array,int max );
void swap(int *array,int max,int *x,int *y);
int main()
{
int sum,i,j=0,a[10],max;
printf("enter the size \n");
scanf(" %d",&max);
for(i=0;i<max;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<max;i++)
{
printf(" data entered a[%d] = %d \n ",i,a[i]);
}
printf("\n");
printf("%d",&a[1]);
//for(i=0;i<max;i++)
{
swap(a,max,&a[0],&a[1]);
}
sum=add(a,max); // array name is same as address of array//or sum=add(&a[0],max);
printf("%d",sum);
}
int add(int *array,int max)
{
int sum=0,i=0;
while(i<max)
{
sum=sum +array[i];
i++;}
return sum;
}
void swap(int *a,int max, int *x,int *y)
{
int i,temp;
temp=*y;
*y=*x;
*x=temp;
printf("\n%d %d",*x,y);
for(i=0;i<max;i++)
{
printf("\n %d",a[i]);
}
printf("\n");
}