赋值从没有强制转换的指针生成整数 [-Wint-conversion

Posted

技术标签:

【中文标题】赋值从没有强制转换的指针生成整数 [-Wint-conversion【英文标题】:Assignment makes integer from pointer without a cast [-Wint-conversion 【发布时间】:2016-04-22 18:13:36 【问题描述】:

我真的不明白为什么我知道tmpkey 是相同的类型和大小。

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】:

tmpkey 是同一类型

。他们不是。它们都是数组,但数据类型不同。一个是uint8_t *array,另一个是uint8_t 数组。

改变

 uint8_t *tmp[8];

uint8_t tmp[8] = 0;

【讨论】:

这不是我的反对意见,但我看不出他的代码在哪里使用了来自 tmp 未初始化的指针。他分配tmpith 项,而不是取消引用它。分配给未初始化的指针几乎不是未定义的行为。 @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指针和数组:[警告]赋值使指针从整数而不进行强制转换[关闭]

警告:赋值从整数中生成没有强制转换的指针[-Wint-conversion]

strcpy 从整数生成指针而不进行强制转换