我有一个函数uint8_t EE_Write(uint8_t addr, uint8_t len, uint8_t * buf),它接受一个指向它将写入内存的数据的指针,还有一个uint16_t myword,我想给它。基本的

EE_Write(0,sizeof(myword),&myword);

给我一个编译器警告“Indirection to different types('unsigned int*const'而不是'unsigned char*const')”,即使当我将单词(int)类型转换为字节(char)时,我也收到了完全相同的警告(括号对分组没有帮助)。
EE_Write(0,sizeof(myword),&(uint8_t)myword);

警告随联合而消失,但为了使编译器满意,必须将其写入另一个变量是很愚蠢的。
union catbyte {
    uint16_t w;
    uint8_t b[2];
};

union catbyte mybytes;

mybytes.w = myword;
EE_Write(0,sizeof(myword),mybytes.b);

最佳答案

你可以:

EE_Write(0,sizeof(myword),(uint8_t *)&myword);

但是,首选的方法是定义函数以获取一个空指针,如:
uint8_t EE_Write(uint8_t addr, uint8_t len, const void * buf);

然后编译器不应该对你传递的任何指针类型发出警告。

10-02 04:32