我不确定如何修复这段代码的警告(警告与第二行有关)。 这不是我的代码,但确实完美。但是,我想摆脱警告但很困惑。 v是我们想要指向的无符号长整数。我们正在使用avr-gcc。
../../ uJ / uj.c:1149:20:警告:从不兼容的指针类型初始化 const UInt8 * d =& v;
static void ujThreadPrvPut32(UInt8* ptr, UInt32 v){ //to pointer
const UInt8* d = &v;
*ptr++ = *d++;
*ptr++ = *d++;
*ptr++ = *d++;
*ptr = *d;
}
答案 0 :(得分:3)
添加演员:
const UInt8* d = (const UInt8*)&v;
答案 1 :(得分:-1)
作为对另一个答案的补充:
首先将ptr
参数作为常量指针提供better practice。
static void ujThreadPrvPut32(UInt8* const ptr, UInt32 v);
由于ptr
提供了数据应该到达的目标地址,因此该函数不应更改此位置,只能更改该位置的CONTENTS。
另一方面,你可以使用memcpy()。
uint8_t* ptr = 0; // has to be set to desired target address obviously
uint32_t value = 123;
memcpy(ptr, &value, sizeof(value));