将变量转换为(void*)有什么影响?

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);

Fre*_*Foo 5

void*是通用数据指针类型,当用作参数类型时,表示函数在"裸"内存块上工作.它不能被解除引用.

任何其他数据指针类型都可以隐式转换为void*,因此显式强制转换可能是错误的(不必要的),或者是破坏的编译器的变通方法,或者是强制转换为unsigned char *(在这种情况下它是破坏的接口的变通方法).