赋值从没有强制转换的指针生成整数 [-Wint-conversion
Posted
技术标签:
【中文标题】赋值从没有强制转换的指针生成整数 [-Wint-conversion【英文标题】:Assignment makes integer from pointer without a cast [-Wint-conversion 【发布时间】:2016-04-22 18:13:36 【问题描述】:我真的不明白为什么我知道tmp
和key
是相同的类型和大小。
uint8_t key[8] = 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07;
void change()
int i;
uint8_t *tmp[8];
for(i=0; i<8; i++)
tmp[i] = key[(i+3)%8];
这会产生:
警告:
【问题讨论】:
【参考方案1】:
tmp
和key
是同一类型
否。他们不是。它们都是数组,但数据类型不同。一个是uint8_t *
array,另一个是uint8_t
数组。
改变
uint8_t *tmp[8];
到
uint8_t tmp[8] = 0;
【讨论】:
这不是我的反对意见,但我看不出他的代码在哪里使用了来自tmp
未初始化的指针。他分配给tmp
的i
th 项,而不是取消引用它。分配给未初始化的指针几乎不是未定义的行为。
@CodyGray 先生,您说得对,我也对数据类型感到困惑......感谢您指出这一点。但是,关于 DV,那是在我添加那部分之前,作为编辑.....所以,.... :(【参考方案2】:
不清楚你想要什么,但如果你想让tmp[x]
反映key[y]
中的值,那么
tmp[i] = &key[(i+3)%8]; /* tmp[i] now points at key[ (i+3)%8];
// key[3] = 5; /* These two lines modify the same memory */
// (*tmp[0]) = 5; /* */
否则如果你想 tmp 是分开的,那么...
uint8_t tmp[8]; /* change type to be non-pointer. */
【讨论】:
以上是关于赋值从没有强制转换的指针生成整数 [-Wint-conversion的主要内容,如果未能解决你的问题,请参考以下文章
从 'void *' 对 'int' 的赋值使指针从没有强制转换的整数
C指针和数组:[警告]赋值使指针从整数而不进行强制转换[关闭]