我要执行的最后一项任务是交换我的数组的第一个元素的值(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;
}
答案 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]);
这不是给出函数原型的标准方法。
更正:
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;
}