【问题标题】:Assignment makes integer from pointer without a cast [-Wint-conversion赋值从没有强制转换的指针生成整数 [-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];
    }
}

这会产生:

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

【问题讨论】:

    标签: c arrays pointers variable-assignment uint8t


    【解决方案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. */
    

    【讨论】:

      猜你喜欢
      • 2016-05-29
      • 2019-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      相关资源
      最近更新 更多