C语言 程序设计 关于数组的初始化
对于字符数组可以这样定义chars[]="BOOK"也可以chars[10]="BOOK"但是chars[10];s[10]="BOOK"和chars[10];s[]="...
对于 字符数组
可以这样定义
char s[]="BOOK"
也可以 char s[10]="BOOK"
但是
char s[10];
s[10]="BOOK"
和 char s[10];
s[]="BOOK"
等等 都是错的
有哪位可以解释下到底怎么出错的么?
和数组是在编译的时候初始化而不是在运行时初始化有关系么?????
和 数组是静态存储有什么关系么???? 展开
可以这样定义
char s[]="BOOK"
也可以 char s[10]="BOOK"
但是
char s[10];
s[10]="BOOK"
和 char s[10];
s[]="BOOK"
等等 都是错的
有哪位可以解释下到底怎么出错的么?
和数组是在编译的时候初始化而不是在运行时初始化有关系么?????
和 数组是静态存储有什么关系么???? 展开
2个回答
展开全部
你好!!!
char s[]="BOOK"
char s[10]="BOOK"
都表示在声明数组的时候,就初始化,就是先了定义,即给数组分配了内存空间,系统并把字符“BOOK”,放到刚才的空间里,所以是符合语法的。
但是
char s[10];
s[10]="BOOK"
和 char s[10];
s[]="BOOK"
都是错误的,原因是:语法规定字符数组要是在声明的时候没有初始化,就没有机会直接赋值了(具体的原因后面再说)
要想赋值,必须用strcpy()
但是我们定义字符指针就不一样了,比如:
char *p;
p="hello";表示此时定义了一个指针变量,此时系统会把字符串="hello";放到内存的静态存储区(即内存的一种,是静态的原因是里的值是不能修改的)并把字符串的首地址赋值给指针变量p,使指针变量指向字符串;这是可以的。
现在我们看看:
char s[10];
s[10]="BOOK"
和 char s[10];
s[]="BOOK"
到底是什么原因:
char s[10];首先声明了字符数组,但是没有分配空间,接着
s[10]="BOOK"因为现在的是数组s已经声明过了,系统会先字符串放到静态存储区,然后返回一个指针,但是此时等号左边是数组而且有10个字节这么大,等号两边都是不同类型的,怎么可以赋值呢???
编译器检查错误就会报错了。
呵呵,希望lz可以理解。
char s[]="BOOK"
char s[10]="BOOK"
都表示在声明数组的时候,就初始化,就是先了定义,即给数组分配了内存空间,系统并把字符“BOOK”,放到刚才的空间里,所以是符合语法的。
但是
char s[10];
s[10]="BOOK"
和 char s[10];
s[]="BOOK"
都是错误的,原因是:语法规定字符数组要是在声明的时候没有初始化,就没有机会直接赋值了(具体的原因后面再说)
要想赋值,必须用strcpy()
但是我们定义字符指针就不一样了,比如:
char *p;
p="hello";表示此时定义了一个指针变量,此时系统会把字符串="hello";放到内存的静态存储区(即内存的一种,是静态的原因是里的值是不能修改的)并把字符串的首地址赋值给指针变量p,使指针变量指向字符串;这是可以的。
现在我们看看:
char s[10];
s[10]="BOOK"
和 char s[10];
s[]="BOOK"
到底是什么原因:
char s[10];首先声明了字符数组,但是没有分配空间,接着
s[10]="BOOK"因为现在的是数组s已经声明过了,系统会先字符串放到静态存储区,然后返回一个指针,但是此时等号左边是数组而且有10个字节这么大,等号两边都是不同类型的,怎么可以赋值呢???
编译器检查错误就会报错了。
呵呵,希望lz可以理解。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询