为什么初始化如下:
char *p = "hello";
允许,但是:
char *p = {'h','e','l','l','o','\0'};
不是,虽然它们的意思相同?
答案 0 :(得分:2)
为什么初始化如下char * p =“hello”;是允许的。但是char * p = {'h','e','l','l','o','\ 0'};是不允许的,虽然它们的意思相同。
因为字符串文字是字符数组。数组不是指针(阅读c-faq)。两者都不同。
char *p = "hello"; // Non modifiable, store in ROM
char p[] = {'h','e','l','l','o','\0'}; //Modifiable and stored in RAM
答案 1 :(得分:0)
字符串文字"hello"
的类型为const char *
,初始化p
类型char *
且"hello"
有效,因为调用了隐式转换。
但是在第二个语句中{'h','e','l','l','o','\0'}
是一个char
数组,你不能用数组初始化一个指针。要使用数组初始化p
,它也必须是一个数组:
char p[6] = {'h','e','l','l','o','\0'};
或
char p[] = {'h','e','l','l','o','\0'};