#include <iostream>

using namespace std;

int main()
{
    char* p = "wanglibao";
    char* a = new char[10];
   // p[0] = 'e';
    a[0] = 'e';
    cout << *a << endl;
    return 0;
}


 数组开辟空间只能在栈或者静态空间(全局的),而指针则可以任意开辟,可以在堆栈静态都行。

像上边代码中,指针p指向一个栈中的字面值常量。a指向一个堆中的空间,所以可以用a[0]来直接操作该数,也可以用指针来操作。*a 输出的是第一个字节的内容。

但p[0] 在编译时不会有问题,运行时会出错。

#include <iostream>

using namespace std;

int main()
{
    char* p = "wanglibao";
    char* a = new char[10];
   // p[0] = 'e';
    a[0] = 'e';
    a[2] = 'd';
    cout << *(a+1) << endl;
    return 0;
}

开辟空间后,其中系统会默认存入数据。
指针与数组的区别,以及指针的空间开辟问题_#include