将数组作为参数传递并交换数据 - 意外数据

时间:2015-05-10 16:19:36

标签: c arrays function pointers swap

当我在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");
}

2 个答案:

答案 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]包含1a[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");

}