char c[10]={'H','E','L','L','O','!','\0'};这里不需要显示地给出字符串结束标志'\0',而char c[ ]={'H','E','L','L','O','!','\0'};则要显示地给出字符串结束符'\0',为什么?
如果你不指定数组元素个数 编译器会自动帮你计算出元素个数的追问
编译器会自动帮你计算出元素个数?那为什么要显示地给出字符串结束符'\0'?编译器自动帮你计算出元素个数是6还是7个?
追答char c[ ]={'H','E','L','L','O','!','\0'}; 这个数组长度是7 (好吧刚给看到 你的还有个!号)
追问那为什么第二个数组一定要输入一个'\0'?第一个可以输入或不输入呢?
追答char b[]={ 'h','e','l','l',o'} 也可以这样用 但是你不能把他当做字符串来用 因为很多函数比如输出printf 等 是需要用\0来判断字符串是不是到了结尾了 假如你仅仅是把这个当做数组用的话就不需要加了 但是你要是吧他当做字符串就得加 \0
字符数组可以当做字符串来使用 只有当做字符串来使用的时候你才要在结尾加\0
char * a="hello" 这个是个字符串 ; char b[]={ 'h','e','l','l',o','\0'} 是个字符数组
你可以吧字符数组当做字符串来使用 两者是有很多区别的
比如a的hello 是在代码段的 是只读的
b的hello是在你的栈空间, 里面的元素师可以修改的
是不是如果char b[]={ 'h','e','l','l',o'} 当做字符串使用和只当做数组来使用,显示的效果是一样的?
追答显示效果当然是不一样的 如果你这种用法的话 你输出到o不会停止 而会读取o后面的字符 一直到读取到0为止 比如你的 函数栈中 h e l l o 后面有 a b c d 0 那么输出的就是 helloabcd
那么为什么char c[ ]={'H','E','L','L','O','!','\0'};则要显示地给出字符串结束符'\0'?