【问题标题】:Convert const void pointer to int pointer将 const void 指针转换为 int 指针
【发布时间】:2014-11-30 18:03:37
【问题描述】:

编译器告诉我:

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。

【问题讨论】:

标签: c pointers constants


【解决方案1】:

不允许从const 指针转换为普通指针,因为这会破坏const 提供的保证(应该没有人可以写入它)。

但是,由于您只想读取这些指针,因此可以(并且建议)简单地将它们声明为 const。那么你甚至根本不需要任何演员:

const int *uziv1 = a;
const int *uziv2 = b;

【讨论】:

    【解决方案2】:

    我最终修复它:

    ...
      int const *uziv1=*(( int const **)a);
      int const *uziv2=*(( int const **)b);
    ...
    

    【讨论】:

    • 以您建议的方式编辑问题是错误的。问题是问题,答案是答案,两者都应该在这里分开。这个答案对我来说看起来不错,所以没有理由抱怨或投反对票。如果解决了他的问题,它也应该作为公认的答案结束。
    猜你喜欢
    • 2013-11-18
    • 2015-09-10
    • 1970-01-01
    • 2021-07-22
    • 2017-02-12
    • 2010-12-14
    • 1970-01-01
    • 2021-09-20
    相关资源
    最近更新 更多