Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
警告:正在传递'的参数2;转换标签';来自不兼容的指针类型[-Wincompatible指针类型]|_C_Arrays_Pointers_Multidimensional Array - Fatal编程技术网

警告:正在传递'的参数2;转换标签';来自不兼容的指针类型[-Wincompatible指针类型]|

警告:正在传递'的参数2;转换标签';来自不兼容的指针类型[-Wincompatible指针类型]|,c,arrays,pointers,multidimensional-array,C,Arrays,Pointers,Multidimensional Array,我的编译器给了我这个警告:传递来自不兼容指针类型[-Wincompatible指针类型]的“transform_labels”的参数2,注意:应为“int(*)[10]”,但参数类型为“int**” 我的代码: void transform_labels(int array[60000], int labels[60000][10], int NPAT){ for(int i = 0; i < NPAT; i++){ int aux = array[i];

我的编译器给了我这个警告:传递来自不兼容指针类型[-Wincompatible指针类型]的“transform_labels”的参数2,注意:应为“int(*)[10]”,但参数类型为“int**”

我的代码:

void transform_labels(int array[60000], int labels[60000][10], int NPAT){

    for(int i = 0; i < NPAT; i++){

        int aux = array[i];
        labels[i][aux] = 1;
        printf("%d\n ",*labels[i]);
        if ((i+1) % 10 == 0) putchar('>');

    }

}

int main() {

   load_mnist();
   int loop;
   int** labels;
   allocate_mem(&labels, 60000, 10);
   printf("HERE");
   transform_labels(train_label, labels, 60000);
   return 0;

}
void transform_标签(int数组[60000],int标签[60000][10],int-NPAT){
对于(int i=0;i');
}
}
int main(){
load_mnist();
内环;
int**标签;
分配_mem(和标签,60000,10);
printf(“此处”);
转换标签(列车标签,标签,60000);
返回0;
}

指向指针的指针不能转换为指向数组的指针。而数组可以转换为只应用于多维数组最外层维度的指针

您需要更改函数的声明:

void transform_labels(int *array, int **labels, int NPAT){

指向指针的指针不能转换为指向数组的指针。而数组可以转换为只应用于多维数组最外层维度的指针

您需要更改函数的声明:

void transform_labels(int *array, int **labels, int NPAT){

允许传递指针而不是函数参数的第一个维度,反之亦然,但所有其他维度必须匹配。你有一个第二维度[10]

您可以向它传递一个指向大小为10的数组的指针,但这可能会将问题推到代码中的另一个点,例如分配函数。应编译以下内容,但不清楚这是否是您想要的:

typedef int LabelSub[10];
LabelSub* labels;
allocate_mem(&labels, 60000, 10);

允许传递指针而不是函数参数的第一个维度,反之亦然,但所有其他维度必须匹配。你有一个第二维度[10]

您可以向它传递一个指向大小为10的数组的指针,但这可能会将问题推到代码中的另一个点,例如分配函数。应编译以下内容,但不清楚这是否是您想要的:

typedef int LabelSub[10];
LabelSub* labels;
allocate_mem(&labels, 60000, 10);

在typedef后面隐藏数组通常和在typedef后面隐藏指针一样糟糕。相反,只需执行
int标签[60000][10]
。此外,您对这段代码所做的只是将不兼容的指针类型错误移动到
allocate\u mem
@Lundin。typedef的作用不是“隐藏”它,而是使它可写。我发现混合指针和数组的语法几乎不可读。是的,它将取决于分配函数实际返回的类型。这是代码中的“其他”点。在typedefs后面隐藏数组通常和在typedefs后面隐藏指针一样糟糕。相反,只需执行
int标签[60000][10]
。此外,您对这段代码所做的只是将不兼容的指针类型错误移动到
allocate\u mem
@Lundin。typedef的作用不是“隐藏”它,而是使它可写。我发现混合指针和数组的语法几乎不可读。是的,它将取决于分配函数实际返回的类型。这是代码中的“其他”点。以前已多次询问此问题。问题是
int**
,它与数组无关。可能会有帮助。这已经被问过很多次了。问题是
int**
,它与数组无关。可能会有帮助。