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

关于K&R中strcmp实现的指针运算合法性疑问

问题解答

你的理解完全正确,两个操作的合法性分析如下:

  • return *s - *t;完全合法
    这里的*s和*t是对指针解引用后得到的char类型整数值,执行的是普通整数减法,和指针运算规则无关。只要s、t是指向有效字符内存的合法指针,无论二者指向的是不是同一个数组,这个操作都符合C语言标准要求。
  • 改为s - t属于非法操作,是明确的未定义行为
    按照K&R提到的指针运算规则,以及C标准的明确规定:只有两个指针指向同一个数组的元素(或数组尾元素的下一个地址)时,指针相减的结果才有定义,值为两个元素的下标差。如果两个指针指向不同的内存对象,地址之间没有标准约定的关联逻辑,相减结果完全不可预期,部分架构下甚至会触发程序崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:21:01