在c++中,内存可以是静态分配的——编译器在处理源代码的时候就分配,也可以是动态分配的---程序在 运行的时候调用所需要得库函数进行分配。这两种分配方式各有个的优点。由于静态内存分配是在程序运行之前就分配了内存,所以执行的效率就很高。但是缺乏灵活性。它要求知道程序在之前就知道内存的类型和数目。
例如:
利用静态分配的字符串数组,我们就无法很容易的处理和存贮任意的文本文件。一般来说存贮未知的的数目的元素,需要动态分配内存的灵活性。
例如:以下的定义:
int ival=1024;
指示编译器分配足够的内存来存贮一个整型值。该存储区与名字ival相关联。然后用1024区初始化该存贮区,这些都是在程序之前完成的。
c++支持用指针类型来存放对象的内存地址值。
例如:
为了声明一个存放ival内存地址的的指针类型。我们可以声明如下:
int *print;//////一个指向int类型的指针。
c++预定一个专门取地址的操作符(&),当他应用于一个对象上的时候,返回的是该对象的地址。
因此,为了将ival的地址值赋值给print,我们可以写为:
int*print;
print=&ival;///把ival的地址值赋值给print
为了访问print所指向的内容。我们必须先用解引用(dereference)操作符(*),来先解除的引用。
例如:我们通过print间接的给ival加1;
*print=*print+1;
等价于:
直接对 ival进行操作
ival=ival+1;
在c++中指针主要是用来管理和分配动态分配的内存。
对象的分配可以通过两个不同的版本来实现。
第一个版本用于分配特定类型的单个对象。
int*print=new int 1024);
分配了一个没有名字的int类型的对象,对象的初始化值为1024。然后表达式返回对象在内存中的地址。
接着这个地址用来初始化指针对象print.    对于动态分配的内存。唯一的访问方式是通过指针来访问。
例如:
new的第二个版本,用于分配特定的类型和维数的数组。
int *pia=new int[4];
分配了一个含有4个元素的整型数组。不幸的是我们没有办法给动态分配的数组每个值显示的指定一个初始值。
分配动态数组,一个常令人困惑的问题是,返回值只是一个指针。与分配单一对象的返回值是相同的。