c - 来自给定数组的位 vector 实现

标签 c arrays vector bit

我正在尝试从给定数组创建一个位 vector 集。不知道如何开始。例如给定数组:int rows[] = {1, 2, 5} 我需要创建一个函数 unsigned short MakeBitVector(int values[], int nValues)您可以假设数组中元素的范围是 1-9。这是我到目前为止所拥有的:

unsigned short MakeBitVector(int values[], int nValues)
{
  (55)unsigned short int set = calloc(nValues, sizeof(unsigned short));
  for(int i = 0; i < nValues; i++){
    (57)set[i] = values[i];
  }
  return set;
}

我不断收到警告和错误:

bits.c:55: 警告:初始化从没有转换的指针生成整数

bits.c:57: 错误:下标值既不是数组也不是指针

关于如何解决这个问题有什么想法吗?

最佳答案

你肯定需要你的 set 是一个指针:

unsigned short int* set = calloc(nValues, sizeof(unsigned short));

而且您还必须将函数的返回类型更改为指针。

编辑:如果你想把所有东西都打包成一个int,你可以用更简单的方式继续:

unsigned short MakeBitVector(int values[], int nValues)
{
    unsigned short int set = 0;
    for (int i = 0; i < nValues; i++)
        set |= 1 << values[i];
    return set;
}

您不需要分配单个 int,返回副本就可以了。

关于c - 来自给定数组的位 vector 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10541768/

相关文章:

c++ - 使用模板和 vector 时出现编译错误

database - 在 Postgres 中存储矢量数据的有效方法是什么?

c++ - C++: vector 数组

c - 从 C 中的两个线程访问变量

c - 在 Linux 上确定陈旧的 Samba 安装的最快方法

c - 数组程序的输出

java - 根据数组列表的值对数组的内容进行排序

C 链表在指针传递时被修改

c - C 中的结构 - 访问值

java - 如何按下一个按钮,移动到数组的下一个位置