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

为何两种char数组定义场景下sizeof计算结果相同?

char数组sizeof计算结果的疑问解析

先看你给出的代码示例:

char  string0[]=  "0123456789";  // sizeof(string0)=11
char  string1[11]="0123456789A"; // sizeof(string1)=11

首先纠正你对string1的理解错误:

  • 当你显式声明char string1[11]时,编译器会直接分配11字节的内存空间给这个数组,sizeof(string1)的结果就是数组的总长度11,和里面存的内容无关。这里初始化的"0123456789A"刚好是11个字符(10个数字+1个'A'),数组会被完全填满,没有额外的'\0'空间——这个数组并不是标准的C风格字符串,因为它末尾没有终止符。

再解释string0的情况:

  • 当你用char string0[] = "字符串字面量"这种方式声明数组时,编译器会自动根据字面量的长度推导数组的大小。字符串字面量"0123456789"包含10个数字字符,而C语言中字符串字面量默认会在末尾添加一个'\0'终止符,所以这个字面量实际占用11字节的内存。编译器会把string0的长度设置为11,刚好装下这10个字符加'\0',因此sizeof(string0)返回11。

核心要点:

  • sizeof计算的是数组整体的内存占用大小,和数组里是否包含'\0'、是不是字符串没有关系。对于char数组来说,结果就是数组的元素个数(因为每个char占1字节)。
  • 用字符串字面量初始化无长度声明的char数组时,数组长度会包含字面量自带的'\0';显式指定数组长度时,数组长度就是你指定的数值,初始化内容如果刚好填满数组,就不会有额外的'\0'位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 20:34:59