2.指针数组:一个数组里存放的都是同一个类型的指针,通常我们把他叫做指针数组。
比如 int * a[10];它里边放了10个int * 型变量,由于它是一个数组,已经在栈区分配了10个(int * )的空间,也就是32位机上是40个byte,每个空间都可以存放一个int型变量的地址,这个时候你可以为这个数组的每一个元素初始化,在,或者单独做个循环去初始化它。
3.例子:
int * a[2]={ new int(3),new int(4) }; //在栈区里声明一个int * 数组,它的每一个元素都在堆区里申请了一个无名变量,并初始化他们为3和4,注意此种声明方式具有缺陷,VC下会报错
例如 :
int * a[2]={new int[3],new int[3]};
delete a[0];
delet a[10];
int * a[2];
a[0]= new int[3];
a[1]=new int[3];
delete a[0];
delet a[10];
这样申请内存的风格感觉比较符合大家的习惯;由于是数组,所以就不可以delete a;编译会出警告.delete a[1];
注意这里 是一个数组,不能delete [] ;
4.指针的指针;
int ** cc=new (int*)[10]; 声明一个10个元素的数组,数组每个元素都是一个int *指针,每个元素还可以单独申请空间,因为cc的类型是int*型的指针,所以你要在堆里申请的话就要用int *来申请;
看下边的例子 (vc & GNU编译器都已经通过);
int ** a= new int * [2]; //申请两个int * 型的空间
a[1]=new int[3]; //为a的第二个元素又申请了3个int 型空间,a[1]指向了此空间首地址处
a[0]=new int[4]; ////为a的第一个元素又申请了4个int 型空间,a[0] 指向了此空间的首地址处
int * b;
a[0][0]=0;
a[0][1]=1;
b=a[0];
delete [] a[0] //一定要先释放a[0],a[1]的空间,否则会造成内存泄露.;
delete [] a[1];
delete [] a;
b++;
cout<<*b<
#include
#include
#include
比如一个包含3个元素的CandyBar数组,使用new来动态分配数组,并初始化,然后显示,代码如下:
#include
#include
#include
#include
#include
using namespace std;
struct CandyBar{
CandyBar():brand(""),weight(0.0),calorie(0){
printf("brand:%s,weight:%lf,calorie:%d\n",brand.c_str(),weight,calorie);
}
string brand;
double weight;
int calorie;
};
int main()
{
struct CandyBar* pCandyBar = new struct CandyBar[3];
}
PMYLINE pMyline = new MYLINE[MAX_LINE];
PMYLINE pMyline = new PMYLINE[MAX_LINE];
PMYLINE pMyline[MAX_LINE] = new pMyline[MAX_LINE]