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

为何printf()中整数与字符串用‘+’运算后输出‘Quiz’?

为什么5+"test_Quiz"在C语言中能运行并输出"Quiz"?

1. 字符串字面量的本质

在C语言里没有专门的“字符串类型”,"test_Quiz"这类字符串字面量本质是以'\0'结尾的char数组。当它出现在表达式中时,会自动转换为指向数组第一个元素的指针(即char*类型)——简单说,"test_Quiz"在这里等价于指向字符t的指针。

2. 合法的指针算术操作

你看到的5+"test_Quiz"不是整数和“字符串”直接相加,而是整数与char类型指针的加法运算,这是C语言明确允许的指针算术规则:

  • 指针加上整数n,会指向当前指针位置往后偏移n个同类型元素的地址。
  • 这里5+"test_Quiz"完全等价于&"test_Quiz"[5],也就是跳过前5个字符,直接指向数组中第6个字符的位置。

3. 具体的字符偏移与输出逻辑

把"test_Quiz"的字符序列按索引列出来:
索引0: 't',1: 'e',2: 's',3: 't',4: '_',5: 'Q',6: 'u',7: 'i',8: 'z',9: '\0'(字符串结束符)

5+"test_Quiz"指向的是索引5的'Q',printf接收这个指针后,会从该地址开始逐个输出字符,直到遇到'\0'停止,所以最终输出"Quiz"。

为什么不会报错?

整个操作完全符合C语言语法规则:字符串字面量转成char*指针,和整数进行指针加法是合法操作,编译器不会触发错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 15:15:02