编译器告诉我:
In function ‘int compare(const void*, const void*)’:
invalid conversion from ‘const int*’ to ‘int*’ [-fpermissive]
invalid conversion from ‘const int*’ to ‘int*’ [-fpermissive]
这是我的职责:
int compare(void const *a, void const *b) {
int *a2 = (int*)a;
int *b2 = (int*)b;
int *uziv1=*((const int**)a2);
int *uziv2=*((const int**)b2);
if(abs(uziv1[0]) < abs(uziv2[0])) return -1;
if(abs(uziv1[0]) > abs(uziv2[0])) return 1;
if(abs(uziv1[1]) < abs(uziv2[1])) return -1;
if(abs(uziv1[1]) > abs(uziv2[1])) return 1;
return 0;
}
我需要将两个指针从void转换为int,以便从它们指向的数组中读取并比较这些值。该函数需要具有给定的签名,以便可以用于qsort
。
答案 0 :(得分:1)
不允许从const
指针转换为普通指针,因为这会破坏const
给出的保证(没有人应该写入它)。
但是,由于您只想从这些指针中读取,因此可以(并建议)将它们简单地声明为const
。那你甚至根本不需要任何演员阵容:
const int *uziv1 = a;
const int *uziv2 = b;
答案 1 :(得分:0)
我终于修复了它:
...
int const *uziv1=*(( int const **)a);
int const *uziv2=*(( int const **)b);
...