对C中的字符指针进行类型转换

Nic*_*k T 0 c embedded casting

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

EE_Write(0,sizeof(myword),&myword);
Run Code Online (Sandbox Code Playgroud)

给我编译器警告"间接到不同类型('unsigned int*const'而不是'unsigned char*const')"即使我将单词(int)强制转换为字节(char),我也收到完全相同的警告(并没有任何数量的括号分组帮助).

EE_Write(0,sizeof(myword),&(uint8_t)myword);
Run Code Online (Sandbox Code Playgroud)

警告随联合而消失,但是为了让编译器满意而必须将它写入另一个变量是愚蠢的.

union catbyte {
    uint16_t w;
    uint8_t b[2];
};

union catbyte mybytes;

mybytes.w = myword;
EE_Write(0,sizeof(myword),mybytes.b);
Run Code Online (Sandbox Code Playgroud)

nat*_*ose 7

你可以这样做:

EE_Write(0,sizeof(myword),(uint8_t *)&myword);
Run Code Online (Sandbox Code Playgroud)

但是,这样做的首选方法是定义函数以获取void指针,如:

uint8_t EE_Write(uint8_t addr, uint8_t len, const void * buf);
Run Code Online (Sandbox Code Playgroud)

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