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

标签 c pointers casting void

在 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/

相关文章:

c - MMX:淡入两幅图像结果

c - 为什么这段代码不能正确地对包含数字的行进行排序?

c - 如何在函数中操作变量?

c++ - 使用哪个类型转换; static_cast 还是 reinterpret_cast?

C++ casted realloc 导致内存泄漏

SQL Server十进制变量分配?

c - 如何在C中将 "\003"转换为int

c - 多维数组和指针

c - POSIX 消息队列 - 重启后它是否仍然存在?

c - Rust C 互操作段错误(斜线 STATUS_ACCESS_VIOLATION)