char *p = "abcd"; //这后面就自动加'\0';char p[] = "abcd"; //这后面自动加'\0'char p[4] = "abcd"; //这个就有问题了,因为其实你只能在p中放三个字符。这个'\0'是要你自己加上去的
是否赋值为0这要由编译器决定,不过现在的编译器基本都做到这点了.但好的风格是这样:int a[5]={0};这样a的5个元素初始化都为0,但如果你不想要5个元素都为0那就要人为写了.int a[5]={1,0,3,0,4};另外字符型数组变量系统最后为自动加上\0
LS有误。1.无论如何,初始化不是赋值。2.字符型数组变量不会自动初始化。""之间的字符串(字符串字面量)这种表示方法末尾即隐含了一个字符串结束符'\0'。对于数组而言,无论元素类型如何,如果显式初始化,而且初始化的元素个数小于定义的数组长度时,编译器自动把剩余空间初始化为零。因此int a[5]={0};这类写法相当于全部初始化为零。对于全局或静态变量,如果不显式初始化,所有空间都会被隐式初始化为零。除此之外的局部自动变量,如果不显式初始化,所占空间为随机值。====[原创回答团]