将const void指针转换为int指针

时间:2014-11-30 08:49:57

标签: c pointers const

编译器告诉我:

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

2 个答案:

答案 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);
...