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

C语言重写memset函数时类型转换与指针地址相关问题咨询

问题1解答

C语言的强制类型转换语法有明确规则:必须将目标类型用小括号完整包裹,再放在要转换的变量/表达式前面,因此(unsigned char *)才是合法的无符号字符指针类型转换写法。
你写的str = unsigned char*b完全不符合C语法,编译器无法识别这是类型转换操作,反而会误判为你要在赋值语句中声明名为b的unsigned char*类型变量,和参数列表中已经定义的b冲突,编译阶段就会直接报错。

问题2解答

是的,赋值完成后str和b指向完全相同的内存地址。
对指针做强制类型转换,仅会改变编译器对该指针的类型解释规则,不会修改指针存储的内存地址数值本身:

  • 原参数b是void*类型,无法直接进行指针运算、也无法直接读写指向的内存(因为void没有定义占用的字节长度)
  • 转换为unsigned char*之后,编译器会把该指针指向的内存按1字节为最小单位处理,刚好匹配memset按字节填充内存的实现逻辑,整个过程指针存储的地址值没有发生任何变化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:36:04