c - 是什么导致“警告:来自不兼容的指针类型错误的赋值”?
问题描述
我正在尝试在这里使用指针算术进行实验,但我收到了这个警告。我无法理解这哪里出错了。
由于我的基础很薄弱,因此编写代码是为了使用指针算术。
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]
asvar
并且&var[0]
具有与指针相同的类型ptr
。
&var
不同的类型,因此发出警告。
推荐阅读
- php - 仅在前端检查 WC()->session->has_session() 而不是在 Rest-API 上检查
- python - 我的插入 python 排序总是将第二个数字放在开头
- ios - 代码签名对于证明所有权至关重要吗?
- python - Python按多列压缩行 - groupby 丢弃不应该的组?
- javascript - 在 JHipster (v5.82) 项目中包含自定义类型
- java - 如何在 TextView 上显示 Auto Scrolling RecyclerView 位置?
- python - 使用 pandas 优化应用于系列的散列
- github - 发布时如何关闭 GitHub 生成(和损坏)的 tarball?
- android - 使用整数值动态更改按钮颜色
- excel - Excel:求和仅在可见单元格上重复一次值