char s1[] = "hello1";
char *s2 = "hello2";
区别如下:
1)存储区域不同
s1、s2均存储在栈中;
"hello1"存储在栈中,因为它是一个字符串数组;
"hello2"存储在常量存储区;
另注:C++程序占用的内存总共分为5部分:栈区(局部变量)、堆区(malloc)、全局/静态存储区(全局变量、静态变量)、常量区(常量)和代码区(代码)。
2)sizeof结果不同
sizeof(s1) = 7; // 6个字符加一个'\0'
sizeof(s2) = 4; // 指针的大小
3)能否改变元素
对于s1,可以这样修改元素:*s1 = 'x';
对于s2,操作 *s2 = 'x'; 则是非法的;