You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言通用查找函数使用char*而非int*遍历数组的原因咨询

问题原因分析

这个差异本质是C语言指针算术的类型依赖特性导致的偏移量计算错误,具体逻辑如下:

  • C语言中指针做加法运算时,偏移的字节数会自动乘以指针指向类型的大小:比如T* ptr;,ptr + n的实际偏移字节数为n * sizeof(T)。

使用char* ptr的正确逻辑

char类型的大小固定为1字节,因此ptr + i * ele_size的实际偏移字节数就是1 * i * ele_size = i * ele_size,完全符合通用查找的设计预期:
传入的ele_size是单个数组元素的大小,每次偏移ele_size字节刚好定位到下一个元素的首地址,遍历所有元素时能正确匹配目标值。

替换为int* ptr的错误逻辑

int类型在常见环境下大小为4字节,此时ptr + i * ele_size的实际偏移字节数变成了sizeof(int) * i * ele_size。你测试时传入的ele_size是sizeof(int)=4,因此i=2时实际偏移量为4 * 2 *4 = 32字节,已经远远超出了5个元素的int数组(总大小仅20字节)的地址范围,遍历全程都不会匹配到目标值,最终返回-1。

补充:这个search函数的设计初衷是实现通用类型数组查找,使用char*做基址就是为了用1字节的步长适配任意类型的元素大小,不管是int、double还是自定义结构体都能正常工作,如果固定为int*就失去了通用性。

内容的提问来源于stack exchange,提问作者Hash include

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 19:45:04