我正在尝试从给定数组创建一个位 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/