c - C 函数(如 memcpy)如何处理 void* 数组,因为您不能对 void 指针进行算术运算?
问题描述
我正在寻找在 C 中实现基本模板函数的解决方案,并使用宏制定了一个半解决方案,您可以在其中传递数组的类型文字,这是因为通用 list_t 结构具有“void * data”作为属性,并且你不能用 void* 做算术所以你必须把它转换。现在我有兴趣了解 C 语言本身如何处理泛型函数来操作 void* 数组。任何想法?
解决方案
通用 list_t 结构具有“void* data”作为属性,并且您不能使用 void* 进行算术运算,因此您必须对其进行转换。
实际上,就list_t
结构内部的成员本身而言,指针本身的大小是众所周知的,因此没有什么能阻止语言对列表进行索引。
但是,当您想要访问 所指向的内容时data
,您确实必须将其转换为所需的类型,但这是一个不同的操作。
此外,因此,如果您将 a 的内容从或复制到任何类型的指针,C 将不会发出警告void *
(但是,当两个指针都非空时,他会这样做)。
推荐阅读
- mongodb - 如何使用 MongoDB 聚合进行分组和计数
- python - 将 DHT11 传感器中的值保存到 CSV 文件
- python - 从日历中提取 xlsx 文件以创建所有数据的数据框
- c# - 从字符串SQL转换日期或时间时日期时间转换失败(c#)
- scala - 如何计算给定id的数组列中有多少个大写和小写字符串
- amazon-s3 - Cloudfront mp4 缓存问题
- r - ggplot() 中不显示自定义 y 轴标签
- android - 在 ViewModel 中使用 LiveData 属性值
- java - 在java中创建一个新的单链表
- android - 将位图大小调整为小部件的全宽