是什么引起“警告:来自不兼容指针类型错误的赋值”?

时间:2019-11-10 07:59:18

标签: c pointers incompatibletypeerror

我正在这里尝试使用指针算法,但收到此警告。我不明白这出了什么问题。

由于我的基础知识很薄,因此编写代码时要使用指针算法。

    printf("To Check ptrs \t");
    int var[3]={10,20,30};
    int *ptr,i;
    ptr=var;
    for(i=0;i<3;i++)
    {
       printf("Address is %d \t", ptr);
       printf("Value is %d \t", *ptr);
       ptr++;
    }
    ptr=(int*)&var;
    for(i=0;i<3;i++)
    {
       printf("Address is %d \t", &ptr[i]);
       printf("Value is %d \t", ptr[i]);
    }

ptr_arith.c:14:5: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
  ptr=&var;
     ^

不过,我得到了想要的输出。另外,当我使用

ptr=(int*) &var; 

,它没有给我任何错误。 因此,如果有人可以告诉我是什么原因导致它“不兼容”,我会很感激。

1 个答案:

答案 0 :(得分:1)

这很简单。

您应该按照以下方式将数组衰减到指针:

let connections = [ { group: 'a', items: [ { id: '1', name: 'Andre' }, { id: '2', name: 'David' } ] }, { group: 'b', items: [ { id: '3', name: 'Brandon' } ] }, ] const result = connections.flatMap(f => f.items).find(f => f.id == id); console.log(`result as array`, [result]);

int arr[10];的类型为arr

int *-类型为int *

&arr[0]的类型是指向10个整数的数组的指针。

您应该在代码中使用

&arrptr = varptr = &var[0]var的类型与指针&var[0]相同。

ptr类型不同,因此出现警告。