数组中元素的交换功能

时间:2014-09-19 02:48:42

标签: c arrays function pointers swap

我要执行的最后一项任务是交换我的数组的第一个元素的值(array [0]与我的数组的最后一个元素(array [2]);但是,每当我编译我接收这三个错误,似乎无法修复它们:

:4 redefinition of parameter 'array'

:32 incompatible type for argument 1 of 'swap'
:32 incompatible type for argument 2 of 'swap'

这是我的代码:

    #include <stdio.h>

    void
    swap(double *array[0],double *array[2])
       {
       int temp = *array[0];
       *array[0] = *array[2];
       *array[2] = temp;
       }
   int
   main(int argc, char **argv)
       { 

       double array[3] = {0};
       double realNumber;
       printf("array[0] is %f\n",array[0]);
       printf("array[1] is %f\n",array[1]);
       printf("array[2] is %f\n",array[2]);
       printf("enter the first real number:\n");
       scanf("%lf",&realNumber);
       array[0] = realNumber;
       printf("enter the second real number:\n");
       scanf("%lf",&realNumber);
       array[1] = realNumber;
       printf("enter the third real number:\n");
       scanf("%lf",&realNumber);
       array[2] = realNumber;
       printf("array[0] is %f\n",array[0]);
       printf("array[1] is %f\n",array[1]);
       printf("array[2] is %f\n",array[2]);

       swap(double array[0],double array[2]);

       printf("after swapping...\n");
       printf("array[0] is %f\n",array[0]);
       printf("array[1] is %f\n",array[1]);
       printf("array[2] is %f\n",array[2]);
       return 0;
       }

4 个答案:

答案 0 :(得分:3)

我强烈怀疑这一点,

void
swap(double *array[0],double *array[2])
   {
   int temp = *array[0];
   *array[0] = *array[2];
   *array[2] = temp;
   }

应该是

void
swap(double *array, int a, int b)
   {
   double temp = *array[a]; /* <- it's a double */
   *array[a] = *array[b];
   *array[b] = temp;
   }

并称之为

swap(double array[0],double array[2]);

应该是

swap(array,0,2);

最后,如果您愿意,可以使用temp变量传入两个指针并使用swap(array[0], array[2])调用它,

void swap(double *a, double *b) 
{ 
  double temp = *a;
  *a = *b;
  *b = temp;
}

答案 1 :(得分:1)

redefinition of parameter 'array' : 

由于以下函数调用,您收到此错误:

Error 1 :    
    swap(double array[0],double array[2]);

我们从不在调用函数时使用变量传递数据类型,只需传递
参数。

Correction : 
    swap(array[0],array[2]);     // if you want to pass the values as parameters.
     //or
    swap(array, array); // for passing pointers to the array( pass by reference )      

您可以阅读有关按值传递和按引用传递的信息。需要注意的是,在C
中 数组总是通过引用传递。

Error 2:
incompatible type for argument 1 of 'swap' :32 incompatible type for argument        
2 of 'swap' :

出现此错误是因为您提供的交换函数原型是

    void swap(double *array[0],double *array[2]);     
  1. 这不是给出函数原型的标准方法。

    1. 但是当你调用函数时,你只传递了两个值,而应该根据你的原型定义传递双数组的地址。
    2. 更正:

      1. 原型声明:
        void swap(double *,double *); //通过引用传递
        void swap(double,double); //按值传递

      2.使用各自的函数调用映射正确的原型:

      If you want to pass the base address of the array as argument :          
      prototype : void swap(double *, double *);                   
      call      : swap(array, array);             
      

      但是在这里我建议你不要传递两个参数,如果它们是相同的。

      If you want to pass a specific value stored in array at some index say 'i':
      prototype : void swap(double, double);
      call      : swap(array[i], array[j]);
      

      其中'i'和'j'是数组的索引。

答案 2 :(得分:1)

每次在变量名称前添加类型时,您都会声明该类型的新变量并使用该名称。

所以你在main()

的顶部声明了数组
double array[3] = {0};
// ... some code in between
swap(double array[0],double array[2]); // here you re-declare it

这里不需要double,因为程序已经知道数组包含双精度数。这就是您收到redefinition of parameter 'array'错误的原因。 在第二个语句中删除两个double类型:

double array[3] = {0};
// ... some code in between
swap(array[0], array[2]);

此外,您的数组只包含一个元素,即0。但是您想要交换不存在的第一个array[0]和第三个array[2]元素。创建一个更大的数组,如:

double array[3] = {0, 1, 2};
// ... some code in between
swap(array[0], array[2]);

此外,您对swap函数的定义也是错误的。

void 
swap(double *array[0],double *array[2])
{
    int temp = *array[0];
    *array[0] = *array[2];
    *array[2] = temp;
}

您不需要[position]部分作为参数。此功能是通用的,不应允许仅交换array[0]array[2] 。您在此处需要的只是double *,因为array[position]double,这就是您传递给函数的内容。您通过引用传递此值(这就是您拥有*的原因),以便交换实际上在函数外部工作,而不仅仅是在本地交换。

Read more about pointer/references in C

这就是你应该拥有的:

void swap(double *number1, double *number2)
{
   int *temp = number1;
   number1 = number2;
   number2 = temp;
}

答案 3 :(得分:1)

使用此...更新代码......

#include <stdio.h>

void swap(double *a,double *b)
   {
   double temp = *a;
   *a = *b;
   *b = temp;
   }    
int main(int argc, char **argv)
   { 

   double array[3] = {0};
   double realNumber;
   printf("array[0] is %lf\n",array[0]);
   printf("array[1] is %lf\n",array[1]);
   printf("array[2] is %lf\n",array[2]);
   printf("enter the first real number:\n");
   scanf("%lf",&realNumber);
   array[0] = realNumber;
   printf("enter the second real number:\n");
   scanf("%lf",&realNumber);
   array[1] = realNumber;
   printf("enter the third real number:\n");
   scanf("%lf",&realNumber);
   array[2] = realNumber;
   printf("array[0] is %lf\n",array[0]);
   printf("array[1] is %lf\n",array[1]);
   printf("array[2] is %lf\n",array[2]);

   swap(array,array+2);

   printf("after swapping...\n");
   printf("array[0] is %lf\n",array[0]);
   printf("array[1] is %lf\n",array[1]);
   printf("array[2] is %lf\n",array[2]);
   return 0;
   }