首页 > 解决方案 > 是什么导致“警告:来自不兼容的指针类型错误的赋值”?

问题描述

我正在尝试在这里使用指针算术进行实验,但我收到了这个警告。我无法理解这哪里出错了。

由于我的基础很薄弱,因此编写代码是为了使用指针算术。

    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; 

,它没有给我任何错误。因此,如果有人能告诉我是什么导致它“不兼容”,我将不胜感激。

标签: cpointersincompatibletypeerror

解决方案


这很简单。

您应该通过以下方式将数组衰减为指针:

int arr[10];

arr是类型int *

&arr[0]- 类型为 int *

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

在您的代码中,您应该使用

ptr = varptr = &var[0]asvar并且&var[0]具有与指针相同的类型ptr

&var不同的类型,因此发出警告。


推荐阅读