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

为何初始化str为"face"的这段C代码输出结果为-99?

为什么这段C代码会输出-99?

咱们直接从代码里的关键表达式-2[str]入手拆解:

1. C语言数组下标运算符的交换律

在C语言中,数组下标运算符[]本质上是指针加法的语法糖,也就是说:

a[b] == *(a + b)

而加法是满足交换律的,所以*(a + b)又等价于*(b + a),对应到下标写法就是:

a[b] == b[a]

所以代码里的2[str]完全等价于str[2]——这看起来反直觉,但确实是C标准允许的合法语法(只是可读性极差,实际开发千万别这么写)。

2. 字符串"face"的字符ASCII值

char *str = "face"定义的字符串,在内存中是按顺序存储的字符数组:

  • str[0] = 'f',ASCII码为102
  • str[1] = 'a',ASCII码为97
  • str[2] = 'c',ASCII码为99
  • str[3] = 'e',ASCII码为101

3. 计算表达式-2[str]的结果

结合上面两点,2[str]就是str[2],也就是字符'c'对应的ASCII值99。前面的负号会把这个整数取反,得到-99,最后printf("%d\n", ...)会把这个整数输出到控制台。

总结一下:这个输出完全是C语言指针运算特性和ASCII编码共同作用的结果,核心点就是数组下标的交换律特性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:44:10