我有一个函数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);
然后编译器不应该对你传递的任何指针类型发出警告。