先明白两个概念:
去掉名字就是类型,”[ ]"与变量名的结合强度大于" * "。
指针数组:指针数组,就像整形数组,字符数组一样。是一个类型+变量名的形式
int arr1[10]; //整形数组
char arr2[10]; //字符数组
int* arr3[10]; //指针数组
类型+名字:
类型是整形,再加数组名,就是创建一个名为 arr1,可以存放10个整型数据的数组。
类型是字符,再加数组名,就是创建一个名为 arr2 ,可以存放10个字符的字符数组。
类型是int* ,再加数组名arr3,就是创建一个名为arr3,可以存放10个指针的指针数组。
int* p1=NULL; //整形指针
char* p2=NULL; //字符指针
int(*p3)[10]=NULL //数组指针
类型+名字:
int* 整形指针,名字为p1。 名为p1的整形指针
char* 字符指针,名字为p2。名为p2的字符指针
int (*) [] 数组指针,名字为p3。名为p3的数组指针(指针指向的时数组)
然后,今天没遇到的,在堆区释放内存时的操作:
Worker** newSpace=new Worker* [newSize];
new 是在堆区开辟一块空间,然后返回的类型是一个指针类型,而这句代码的意思是:在堆区创建指定个数的空间来存放指针,也就是在堆区创建一个指针数组,然后用一个二级指针来接收返回值,在delete空间时,这样操作:
// 先释放指针数组中的指针,再释放指向指针数组的指针
//删除堆区中的每个职工对象 释放的是数组中的指针(指针数组)
for (int i = 0; i < this->m_EmpNum; i++) {
delete this->m_EmpArray[i];
this->m_EmpArray[i] = NULL;
}
//删除堆区数组指针 释放的是指向数组的指针(数组指针)
delete[] this->m_EmpArray;
this->m_EmpArray = NULL;
先逐一释放指针数组中指针,然后再释放指向指针数组的指针。对,就这样