内存分为:静态存储区、堆区和栈区。
静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。

char* p = “Hello World1”;
char a[] = “Hello World2”;
p[2] = 'A'; //错误
a[2] = 'A';
char* p1 = “Hello World1;”

指针p存在栈区,但指向的字符串常量存在于静态存储区 故不能修改。
数组a在栈区,并把字符串每个字符依次赋给a[0]、a[1]......。故可以修改。
指针p1也指向相同的字符串常量 故p1==p2

虚函数(virtual)可以是内联函数(inline)吗?

虚函数可以是内联函数,内联是可以修饰虚函数的
但是编译器在处理的时候还是按照函数编译的,内联实际上是不起作用的
因为虚函数是要为多态提供基础的,如果按照内联函数展开后就无法实现多态了。
inline virtual 唯一可以内联的时候是:编译器知道所调用的对象是哪个类(如 Base::who()),这只有在编译器具有实际对象而不是对象的指针或引用时才会发生。