PIC*_*ain 1 c pointers casting void
在C程序中,我看到以下声明:
memcpypgm2ram((void*)&AppConfig.MyMACAddr, (ROM void*)SerializedMACAddress, sizeof(AppConfig.MyMACAddr));
Run Code Online (Sandbox Code Playgroud)
(void*)案例是做什么的?这是为Microchip C30编译器编写的.
AppConfig的定义如下:
APP_CONFIG AppConfig; // APP_CONFIG is obviously a structure...
Run Code Online (Sandbox Code Playgroud)
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};
Run Code Online (Sandbox Code Playgroud)
编辑:我之前应该说过这个,但memcpypgm2ram定义为:#define memcpypgm2ram(a,b,c)memcpy(a,b,c)
基本上, void *memcpy(void *dest, const void *src, size_t n);
void*是通用数据指针类型,当用作参数类型时,表示函数在"裸"内存块上工作.它不能被解除引用.
任何其他数据指针类型都可以隐式转换为void*,因此显式强制转换可能是错误的(不必要的),或者是破坏的编译器的变通方法,或者是强制转换为unsigned char *(在这种情况下它是破坏的接口的变通方法).