Loading... ## 1.既有char* 何有 char[]? 一直以来我对此一无所知,我也一直在想这同一件事的两种写法有何意义,其中的奥妙容我慢慢道来。 ## 2.char* 无法做到的事情 ```c char* p; // 这条语句声明了一个指向char类型的指针p,请注意,它没有为*p 开辟空间,甚至*p在哪儿都是个问题 char p[100]; // 这条语句声明了一个指向char类型的指针p,同时,它为*p开辟了100个字符的空间 ``` ## 3.仅仅如此吗? 有意思的在后面 ```c // 这种写法是古老的,被淘汰的写法,现代编译器只是为了 //兼容以前的错误代码才允许运行的一种写法,因为"abc" 是一个常量,储存在文字常量区 //也就是 const char* ,而const char *是无法转变为 char* 的。这里强制转换的结果就是 //*p指向的量是无法修改的。 char* p = "abc"; // 上面那句的正确写法应该是这样 const char*p = "abc"; // 那么这种写法也不对吗?,非也,这时的"abc"不是常量,这里编译器把该语句解析为 // char p[4] = {'a','b','c','\0'};所以这里的"abc"是储存在栈区的。 char p[] = "abc"; //那么以此推理,这种写法中 p 也是储存在栈区的。其本质是和字符数组char[] 一样。 string p = "abc"; ``` 最后修改:2019 年 11 月 15 日 06 : 42 PM © 允许规范转载