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

为何最后两条cout语句的sizeof结果相同?附C++代码示例

为什么最后两条cout的sizeof结果都是8?

嘿,这个问题的关键在于C++里数组到指针的隐式转换规则,咱们一步步拆解:

首先先明确几个基础知识点:

  • 单个char变量ch的大小是1字节,所以第一条sizeof(ch)输出1,完全符合预期。
  • 像"Hello"这种字符串字面量,它的实际类型是const char[N]——这里的N是字符串长度加1(因为要包含末尾的空终止符\0)。所以"Hello"是const char[6],sizeof它的时候会返回整个数组的总字节数,也就是6,这对应第二条输出。

现在重点看最后两条语句:sizeof("Hello"+ch)和sizeof("HelloWorld"+ch)。这里发生了一个关键的转换:
当你对数组类型(比如const char[6])执行算术运算(比如这里的+ ch)时,C++会自动把数组转换成指向数组首元素的指针,也就是const char*类型。而在当前主流的64位操作系统中,指针的大小是8字节——不管原来的字符串数组有多长,一旦转成指针后,sizeof获取的就是指针本身的大小,所以结果自然都是8。

补充个小细节:这里的ch是char类型,在参与加法运算时会被自动提升为int,但这并不改变最终的类型——因为数组已经转成指针了,指针加整数的结果依然是指针类型,所以sizeof的结果还是指针的大小。

简单总结:

  • 直接对字符串字面量用sizeof,获取的是整个字符数组的总字节数;
  • 当字符串字面量参与算术运算后,会隐式转成指针,此时sizeof获取的是指针的大小(64位系统下为8)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 18:12:27