char指针初始化

时间:2014-02-15 15:43:17

标签: c pointers char

为什么初始化如下:

char *p = "hello";

允许,但是:

char *p = {'h','e','l','l','o','\0'};

不是,虽然它们的意思相同?

2 个答案:

答案 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"有效,因为调用了隐式转换。

enter image description here

但是在第二个语句中{'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'};

enter image description here

相关问题