c - 数组不兼容的指针类型
问题描述
谁能告诉我黑白有什么区别
int vector[]={10,20,30}
int *p = vector
和
int *p= &vector
我知道通过提及数组名称,我们得到它的基址。第二个声明是给我警告
从不兼容的指针类型初始化
为什么警告,这两个语句都给出了数组基地址。
解决方案
在表达式中使用时,数组名称在大多数情况下会衰减为指向其第一个元素的指针。
所以这:
int *p = vector;
相当于:
int *p = &vector[0];
的类型&vector[0]
是int *
,所以类型是兼容的。
数组不衰减的少数情况之一是它是地址运算符的对象&
。然后&array
是数组的地址,类型为int (*)[3]
,即指向大小为 3 的数组的指针。这与 不兼容int *
,因此出现错误。
尽管数组的地址和它的第一个元素的地址具有相同的值,但它们的类型不同。
推荐阅读
- java - XML 文件中的自定义正则表达式字符串模式
- php - Symfony 3:如何使用 Doctrine 同步用户
- ruby-on-rails - 下拉菜单项链接在 rails 和 bootstrap4 中不起作用
- python - kivy 布局:希望将组件的高度比例设置为 5:1
- ionic-framework - 滑动列表可以保存类别和子类别吗?
- python-3.x - 无法在 kaggle 网站中使用 request.post 登录
- python - Networkx:有条件地改变边缘的颜色
- c# - 在 web api 中执行 POST 请求时出现内部服务器错误 500
- javascript - 如何清除单选按钮/将所有选定的单选按钮清除为错误状态。reactjs - 引导
- codeigniter - 代码点火器:导航(视图)到模型:严重性:通知消息:未定义的属性: