需要算术或指针类型的“void”类型的操作数 - C

Joe*_*vin 4 c integer type-conversion void

我用这个方法

void * col_check(void * params) {
parameters * data = (parameters *) params;
int startRow = data->row;
int startCol = data->col;
int *colm = malloc(9);
for (int i = startCol; i < 9; ++i) {
    int col[10] = {0};
    for (int j = startRow; j < 9; ++j) {
        int val = data->arr1[j][i];
        if (col[val] != 0) {
            colm[i]=i;
        }
        else{
            col[val] = 1;
        }
    }
}
return colm;    
}
Run Code Online (Sandbox Code Playgroud)

我想将 colm 数组中的值传递给主程序。所以我使用以下几行来做到这一点。基本上 colm 数组存储的是 arr1 的列索引,根据数独规则这是无效的。(不重要)。

parameters * param10 = (parameters *) malloc(sizeof(parameters));
    param10->row = 0;
    param10->col = 0;
    param10->arr1 = arr1;

void * cols;

pthread_create(&thread_10, NULL, col_check, (void *) param10);
pthread_join(thread_10, &cols);

printf("Calculating column validity please wait.\n");
    sleep(mdelay);

int c;
int value= (int)cols[1];
Run Code Online (Sandbox Code Playgroud)

当我尝试将 cols 1 中的值获取到变量“value”时,出现错误“类型为‘void’的操作数,其中需要算术或指针类型”。我究竟做错了什么 ?有什么建议?完整代码在这里

Mik*_*kis 8

(int)cols[1](int)部分具有的优先级低于的[1]部分,所以编译器尝试计算cols[1]第一。

然后编译器无法计算,cols[1]因为void*它不指向已知大小的项目。如果编译器不知道有多大cols[0],那么它怎么知道在哪里cols[1]呢?

我不确定你想要做什么,但你可能想要的是int value = ((int*)cols)[1];