如果我声明一个像10个字符的字符数组那么…
char letters[10];
我是否创建了一组内存位置,从索引0-9表示为字符,然后第10个索引是空字节?
若是这样意味着我真的在内存中为数组创建11个位置(0到10),最后一个元素是空字节,或者我在内存中有10个位置(0到9)然后C在空格中添加空字节一个新的位置(所以数组比我声明的长1个字节)?
谢谢
好像你和数组和字符串混淆了。
当你申报时
char letters[10] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
然后它在内存位置只保留10个连续字节。
2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 //memory addresses. I assumed it is to be starting from 2000 for simplification. +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ | | | | | | | | | | | | '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | | | | | | | | | | | | +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
在C索引中从0
开始。 您可以从letters[0]
到letters[9]
访问分配的内存位置。 访问位置letters[10]
将调用未定义的行为 。 但是当你宣布这样的时候
char *letters = "0123456789";
要么
char letters[11] = "0123456789";
然后在内存中分配11个字节的空间; 10表示0123456789
,一个表示