1. 下面的例子说明指针和数组的区别

  1. char* p = “Hello World1”;  
  2. char a[] = “Hello World2”;  
  3. p[2] = ‘A’;  
  4. a[2] = ‘A’;  
  5. char* p1 = “Hello World1;” 

这个程序是有错误的,错误发生在p[2] = ‘A’这行代码处,为什么呢,是变量p和变量数组a都存在于栈区的(任何临时变量都是处于栈区的,包括在main()函数中定义的变量)。

因为数据“Hello World2”存在于数组中,所以,此数据存储于栈区,对它修改是没有任何问题的。因为指针变量p仅仅能够存储某个存储空间的地址,数据“Hello World1”为字符串常量,所以存储在静态存储区。

虽然通过p[2]可以访问到静态存储区中的第三个数据单元,即字符‘l’所在的存储的单元。但是因为 数据“Hello World1”为字符串常量,不可以改变,所以在程序运行时,会报告内存错误。

,如果此时对p和p1输出的时候会发现p和p1里面保存的地址是完全相 同的。换句话说,在数据区只保留一份相同的数据。

2. new 可以动态分配数组,也可以动态创建单个对象。

int *a;

int *b = new int;

b = NULL; // 有时会在初始化时置0,

int *c = new int ();// 有初始化值

delete b;

b = 0;//最好在delete后置0,重复delete 0 是安全的;