https://www.cnblogs.com/Fflyqaq/p/12002635.html
示例
int main()
{
char s1[] = "hi";
const char* s2 = "hi";
cout << "*s1: " << static_cast<void*>(&s1) << endl;
cout << "s1: " << static_cast<const void*>(s1) << endl;
cout << "*s2: " << static_cast<void*>(&s2) << endl;
cout << "s2: " << static_cast<const void*>(s2) << endl;
s1[2] = 'o';
//s1 = "1111"; // error
//s2[1] = 'o'; // error
s2 = "1111";
cout << "=========================================" << endl;
cout << "*s1: " << static_cast<void*>(&s1) << endl;
cout << "s1: " << static_cast<const void*>(s1) << endl;
cout << "*s2: " << static_cast<void*>(&s2) << endl;
cout << "s2: " << static_cast<const void*>(s2) << endl;
char a1[] = "abc";
char a2[] = "abc";
const char* a3 = "abc";
const char* a4 = "abc";
cout << "=========================================" << endl;
cout << "*a1: " << static_cast<void*>(&a1) << endl;
cout << "a1: " << static_cast<const void*>(a1) << endl;
cout << "*a2: " << static_cast<void*>(&a2) << endl;
cout << "a2: " << static_cast<const void*>(a2) << endl;
cout << "*a3: " << static_cast<void*>(&a3) << endl;
cout << "a3: " << static_cast<const void*>(a3) << endl;
cout << "*a4: " << static_cast<void*>(&a4) << endl;
cout << "a4: " << static_cast<const void*>(a4) << endl;
}
- 对象
s1
,s2
的内存地址都没改变。 s2
指向的内容的地址变了s1
指向的内容改变了。s1
无法指向新的地址内容,可以修改当前。s2
无法修改当前指向内容,可以重新指向。char[]
指向的内容是拷贝,即使多个对象内容相同,如abc
,但他们指向内容的地址不同。char*
指向地址,如果多个对象内容相同,如abc
,他们指向的内容地相同。