字符串指针:
1)字符串指针变量存储在栈区,其指向的字符串存储在常量区。
2)字符串指针变量存储的字符串首字符的地址,并非整个字符串
3)不能对指向的字符串做任何修改,char * 本质为 char const *
4)字符串指针变量可以做 ++ 操作
字符数组:
1)字符数组直接在栈区开辟空间(和编译器有关,有的编译器把字符串存在常量区,然后拷贝到栈上的数组中;有的直接用指令初始化栈上的字符数组)
2)字符数组保存在栈区,故可以对任意字符进行修改
3)字符数组的数组名不能做 ++ 操作,其本质是一个符号常量
int main() {
// 字符串指针变量
const char* str1 = "hello world";
cout << sizeof(str1) << endl;
cout << *str1 << endl;
cout << *(str1 + 1) << endl;
// *str1 = 'H'; // 错误的,文字常量区只读
// str1++; str1 = str1 + 1;
// 字符串(字符数组)
char str2[] = "hello world";
cout << str2 << endl;
cout << sizeof(str2) << endl;
*str2 = 'H';
cout << str2 << endl;
// str2++;
/*char* p = str2;
p++;*/
// 区别
// 字符串指针变量
// str1 变量,在栈区开辟空间,"hello world"在文字常量区开辟空间
// str1 仅仅保存"hello world"首元素的地址,不是字符串常量本身。
// str1 不能对"hello world 内容进行修改(写的操作)"
// str1 本质是变量,可以++
// 字符串(字符数组)
// str2根据初始化字符串的大小开辟空间,并且直接存储该字符串的内容
// 可以通过str2对"helloworld"进行写操作。
// str2是数组名,是一个符号常量,不能++
return 0;
}