我需要帮助编写一个函数,可以按以下步骤排序两个数组:
1 - 找到值:ratio = array1[]/array2[]
2 - 对结果进行排序,并根据所得的结果对2个数组进行排序
3 - 确保更改发生在参数中提供的数组上
这是我尝试编写的方式,但是我遇到了错误:
||=== Build: Debug in test (compiler: GNU GCC Compiler) ===|
C:\Users\Amine\Desktop\Knapsack\test\main.c||In function 'main':|
C:\Users\Amine\Desktop\Knapsack\test\main.c|40|warning: passing argument 1 of 'triVariable' from incompatible pointer type [-Wincompatible-pointer-types]|
C:\Users\Amine\Desktop\Knapsack\test\main.c|7|note: expected 'int **' but argument is of type 'int (*)[4]'|
C:\Users\Amine\Desktop\Knapsack\test\main.c|40|warning: passing argument 2 of 'triVariable' from incompatible pointer type [-Wincompatible-pointer-types]|
C:\Users\Amine\Desktop\Knapsack\test\main.c|7|note: expected 'int **' but argument is of type 'int (*)[4]'|
||=== Build finished: 0 error(s), 2 warning(s) (0 minute(s), 0 second(s)) ===|
||=== Run: Debug in test (compiler: GNU GCC Compiler) ===|
我找不到解决方法。
void triVariable(int **a, int **c, int n){
int i, j, temp, tempa, tempc;
int *ratio = malloc(n*sizeof(int));
for(i=0;i<n;i++){
ratio[i]= (*c)[i] / (*a)[i];
}
for(i=0; i<n; i++) {
for(j=i+1;j<n; j++) {
if(ratio[j]<ratio[i]) {
temp=ratio[i];
ratio[i]= ratio[j];
ratio[j]= temp;
tempa=(*a)[i];
(*a)[i]=(*a)[j];
(*a)[j]=tempa;
tempc=(*c)[i];
(*c)[i]=(*c)[j];
(*c)[j]=tempc;
}
}
}
}
int main(){
int n=5;
int c[]={12,8,2,5};
int a[]={5,4,1,3};
triVariable(&a, &c, n);
printf("C : ( ");
for(int i=0;i<4;i++){
printf("%d ", c[i]);
}
printf(")\n");
printf("A : ( ");
for(int i=0;i<4;i++){
printf("%d ", a[i]);
}
printf(")\n");
}
如果有人能指出我遗漏的东西,那就太好了!
int *
时传递了例如a
,那么自动传递的是&a[0]
。 - Some programmer dudeint ratio[n];
就可以正常工作,而且不会有任何泄漏问题。 - Some programmer dudea
和c
的范围。您迭代了五个元素,但是a
和c
只有四个。这当然会导致未定义的行为。 - Some programmer dude