c - 关于用数组分配指针变量的 GCC 警告?
问题描述
代码片段:
int *c[2] = {{1,2,3}, {4,5,6}};
发出警告:
warning: incompatible integer to pointer conversion initializing 'int *' with an expression of type 'int'
[-Wint-conversion]
int *c[2] = {{1,2,3}, {4,5,6}};
^
warning: excess elements in scalar initializer
int *c[2] = {{1,2,3}, {4,5,6}};
^
我想数组{1,2,3}
会衰减为指针,所以分配是合法的?
此外,根据警告,为什么编译器认为我试图分配int
给int *
?而不是int array type
to int *
? 提前致谢!
解决方案
带括号的初始值设定项不是数组,因此不能衰减为指针类型。并且因为c
是 的数组int *
,所以每个初始化程序都需要属于该类型。嵌套初始化器仅适用于实际数组(不是指针)或结构。
但是,您可以做的是在具有数组类型的初始化程序中使用复合文字。
int *c[2] = {(int []){1,2,3}, (int []){4,5,6}};
推荐阅读
- flutter - Flutter 模态底片
- javascript - 提交后如何重新加载、清除或重定向 PHPmailer 表单?
- amazon-web-services - 使用服务目录产品中的“更新”终止后创建 EC2 实例
- http-status-code-404 - 文章 URL 上出现大量 404 错误
- prestashop - 在 prestashop 1.7 中创建产品组合以编程方式重复 id 问题
- selenium-webdriver - 如何检查机器人框架中应禁用的元素?
- r - 选择具有负值的数据框中的列
- python - 如何编写一个程序来找到最大的 4 位素数,其数字总和也是素数?
- firebase - 颤振和firebase错误无效的dep文件内核快照.d
- interface - 设备接口的 IP 地址