64,648
社区成员
发帖
与我相关
我的任务
分享
char* p = "hello";
p = 'J';
p[3] = 'L';
cout << p << endl;
char str1[] = "hello ";
char str2[] = "hello ";
cout < <(str1 == str2) < <endl; // str1和str2是两个字符数组,既然是两个数组,就理所当//然拥有不同的存储空间,只不过他们存储的内容相同罢了;进行数组名的比较,此处数组名退化为指针,//也就变成了地址的比较,所以不相等,输出0
const char str3[] = "hello ";
const char str4[] = "hello ";
cout < <(str3 == str4) < <endl;
//str3和str4是两个常字符数组,也是两个数组,所以下面的比较输出也是0,因为地址不相等;
//这里常字符数组的意思是数组储存的元素,也就是hello 串被规定为一个const也就是常串,不能修改其中//的内容,例如str3【0】 = ‘a’这样的语句是非法的。
const char* str5 = "hello ";
const char* str6 = "hello ";
/*
or char * str7 = "hello"; char * str8 = "hello";
*/
// 上述56或者78的组合输出都是1,因为这里他们确实相等,与数组不同,56是两个字符指针,他们指向一块//内存空间,但是并没有给它们new内存,所以它们只是指向一段内存,但是本身并不拥有这段内存,这块内//存中存放的是常串“hello ”,因为是常串,所以在内存中只有一份,所以56指向同一块内存;
//
//56和78的区别是前者是const char* 类型指针,而后者是char*型指针。类型不同
cout < <(str5 == str6) < <endl;