我试图在这里尝试指针算术,但我收到此警告。我无法理解这是哪里出了问题。
编写代码是为了玩指针算术,因为我的基础知识很弱。
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;
,它没有给我任何错误。 因此,如果有人能告诉我是什么原因导致它"不兼容",我将不胜感激。
这很简单。
您应该按以下方式将数组衰减到指针:
int arr[10];
arr
属于int *
类型
&arr[0]
- 类型为 int *
&arr
的类型是指向 10 个整数数组的指针。
在你的代码中,你应该使用
ptr = var
或ptr = &var[0]
为var
和&var[0]
与指针ptr
具有相同的类型。
&var
不同的类型,因此警告。
如果要使用指针存储数组的地址,请在分配数组地址之前使用类型转换