char[] 的真正意义

mac2025-11-19  3

1.既有char* 何有 char[]?

一直以来我对此一无所知,我也一直在想这同一件事的两种写法有何意义,其中的奥妙容我慢慢道来。

2.char* 无法做到的事情

char* p; // 这条语句声明了一个指向char类型的指针p,请注意,它没有为*p 开辟空间,甚至*p在哪儿都是个问题 char p[100]; // 这条语句声明了一个指向char类型的指针p,同时,它为*p开辟了100个字符的空间

3.仅仅如此吗?

有意思的在后面

// 这种写法是古老的,被淘汰的写法,现代编译器只是为了 //兼容以前的错误代码才允许运行的一种写法,因为"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";
最新回复(0)