是什么导致了 "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 = var
或 ptr = &var[0]
因为 var
和 &var[0]
与指针 ptr
具有相同的类型。
&var
不同类型,因此警告。
如果要使用指针存储数组地址,请在分配数组地址之前使用类型转换
我想在这里尝试指针运算,但收到此警告。我不明白这是哪里出了问题。
写代码是为了玩指针运算,因为我基础薄弱
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 = var
或 ptr = &var[0]
因为 var
和 &var[0]
与指针 ptr
具有相同的类型。
&var
不同类型,因此警告。
如果要使用指针存储数组地址,请在分配数组地址之前使用类型转换