在 C 程序中,我看到以下语句:
memcpypgm2ram((void*)&AppConfig.MyMACAddr, (ROM void*)SerializedMACAddress, sizeof(AppConfig.MyMACAddr));
(void*) case 有什么作用?这是为 Microchip C30 编译器编写的。
AppConfig 定义如下:
APP_CONFIG AppConfig; // APP_CONFIG is obviously a structure...
SerializedMACAddress 定义如下:
static ROM BYTE SerializedMACAddress[6] = {MY_DEFAULT_MAC_BYTE1, MY_DEFAULT_MAC_BYTE2, MY_DEFAULT_MAC_BYTE3, MY_DEFAULT_MAC_BYTE4, MY_DEFAULT_MAC_BYTE5, MY_DEFAULT_MAC_BYTE6};
编辑:我之前应该说明这一点,但 memcpypgm2ram 被定义为: #define memcpypgm2ram(a,b,c) memcpy(a,b,c)
基本上,void *memcpy(void *dest, const void *src, size_t n);
最佳答案
void*
是通用数据指针类型,当用作参数类型时,表示函数在“裸”内存块上工作。它不能被取消引用。
任何其他数据指针类型都可以隐式转换为 void*
,因此显式转换可能是错误的(不必要的),或者是损坏的编译器的解决方法,或者转换为 的简写code>unsigned char *
(在这种情况下,它是损坏接口(interface)的解决方法)。
关于c - 将变量转换为 (void *) 有什么影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5475489/