是什么导致了 "warning: assignment from incompatible pointer type error"?

What is causing "warning: assignment from incompatible pointer type error"?

我想在这里尝试指针运算,但收到此警告。我不明白这是哪里出了问题。

写代码是为了玩指针运算,因为我基础薄弱

    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; 

,它没有给我任何错误。 所以,如果有人能告诉我是什么导致它 "incompatible",我将不胜感激。

很简单。

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

int arr[10];

arr 的类型是 int *

&arr[0] - 类型为 int *

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

在你的代码中你应该使用

ptr = varptr = &var[0] 因为 var&var[0] 与指针 ptr 具有相同的类型。

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

如果要使用指针存储数组地址,请在分配数组地址之前使用类型转换