关于c字符数组的问题,请为小弟解开心中的疑惑

我想知道计算机是怎么用sizeof计算字符数组的长度的。字符数组的结尾是\0如果初始化的字符串小于数组的长度则后面全是\0那么定义一个字符数组chara[]="12345... 我想知道计算机是怎么用sizeof计算字符数组的长度的。
字符数组的结尾是 \0 如果初始化的字符串小于数组的长度则后面全是 \0
那么定义一个字符数组 char a[]="12345"的长度为6;char a[10]="12345的长度为10;我觉得在计算长度的时候遇到\0就该结束了,那为什么不是2个的长度都为6呢?所以我想知道计算机是怎么用sizeof计算字符数组的长度的。
展开
 我来答
忘至白葬不情必0T
2011-11-23 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:90%
帮助的人:1.2亿
展开全部
char a[]="12345"是系统根据字符串的实际长度来为a设定长度,所以长度是6。
而char a[10]="12345“则是一开始就设定了数组长度为10,再往数组中初始化数据,不会改变数组本身的长度。
总之,在声明时指明了长度的数组,在sizeof时求得的就是指定的长度。声明时没有指定长度的,根据初始化数据列表的长度为确定数组实际长度。
追问
我想知道的是计算机内部它怎么来获得长度,我定义了a[10];它是怎么知道就是10的;
计算机内部在 栈区里面会分配10个字节的内存存储字符,在静态区 会分配4个字节来存放a的首地址, 计算机在栈区读取字符的时候 遇到\0就知道结束了。那么我定义字符数组只有5个字符,而sizeof是怎么计算出他的长度为10的???
追答
sizeof是在编译阶段就计算好数据的大小的。编译器看见了a[10],当然知道他的长度是10啊。当[]中没有指明大小,那看到"12345"也就知道了长度是6了。
White_MouseYBZ
2011-11-23 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6696万
展开全部
看了你的问题和追问,我来解开你的疑惑:
sizeof计算字符数组的长度时,就是一个依据,那就是看定义字符数组时在[]中写的是多少,写了n,计算出来就是n(实际上就没有计算,拿来就是了;整数等多字节元素数组时才有计算)。你可能不信,认为 char a[]="12345"的[]中没写啊!其实编译器在编译时已根据=后面的常量计算好给[]中填上数字了……定义数组的[]中不填数字实际是编译器语法而不是C/C++语法,编译过后数组的长度都是常量!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-12-04
展开全部
数组变量的长度,如果是随机长度那么就定义为字符串的长度, 如果你预先定义了数组的大小,那么就是数组的长度.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式