指针数组:一个数组里存放的都是同一个类型的指针,通常我们把他叫做指针数组
int * a[2];
a[0]= new int[3];
a[1]=new int[3];
delete[] a[0];
delete[] a[1];
二维指针数组:
int *(*c)[3]=new int *[3][2];
数组指针: 一个指向一维或者多维数组的指针;
int * b=new int[10]; 指向一维数组的指针b ;
注意,这个时候释放空间一定要delete []b ,否则会造成内存泄露, b 就成为了空悬指针.
二级指针:指针的指针或二维数组
int(*ptr)[3]=new int [30][3];//指针所指向的的类型是int()[3] //二维指针的声明
int**ptr=new (int*)[10];//指针所指向的的类型是int* (也就是一个int * 型指针)
三级指针:二级指针的指针或三维数组
int(*b3)[30][20]; //三级指针――>指向三维数组的指针;
int (**p)[2]=new (int(*)[3])[2];
p[0]=new int[2][2];
p[1]=new int[2][2];
p[2]=new int[2][2];
delete [] p[0];
delete [] p[1];
delete [] p[2];
delete [] p;
注意此地方的指针类型为int (*),碰到这种问题就把外边的[2]先去掉,然后回头先把int ** p=new int(*)[n]申请出来,然后再把外边的[2]附加上去;
p 代表了一个指向二级指针的指针,在它申请空间的时候要注意指针的类型,那就是int (*)代表二级指针,而int (**)顾名思义就是代表指向二级指针的指针了。既然是指针要在堆里申请空间,那首先要定义它的范围:(int(*)[n])[2],n 个这样的二级指针,其中的每一个二级指针的最低维是2个元素.(因为要确定一个二级指针的话,它的最低维数是必须指定的,上边已经提到)。然后我们又分别 为p[0],p[1],p[2]…在堆里分配了空间,尤其要注意的是:在释放内存的时候一定要为p[0],p[1],p[2],单独delete[] ,否则又会造成内存泄露,在delete[]p 的时候一定先delete p[0]; delete p[1],然后再把给p申请的空间释放掉 delete [] p ……这样会防止内存泄露。
函数指针:
int a();这个一个函数的声明;
int (*b)();这是一个函数指针的声明;
unsigned psize = sizeof (int (*) ()); 获得函数指针的大小
指针函数:指针函数是指带指针的函数,即本质是一个函数。(函数是放函数入口地址的常量。)
float *find();
函数指针:
是指向函数的指针变量,因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。
int (*ptr)();//指向函数的指针变量没有++和--运算,用时要小心。
int * a[2];
a[0]= new int[3];
a[1]=new int[3];
delete[] a[0];
delete[] a[1];
二维指针数组:
int *(*c)[3]=new int *[3][2];
数组指针: 一个指向一维或者多维数组的指针;
int * b=new int[10]; 指向一维数组的指针b ;
注意,这个时候释放空间一定要delete []b ,否则会造成内存泄露, b 就成为了空悬指针.
二级指针:指针的指针或二维数组
int(*ptr)[3]=new int [30][3];//指针所指向的的类型是int()[3] //二维指针的声明
int**ptr=new (int*)[10];//指针所指向的的类型是int* (也就是一个int * 型指针)
三级指针:二级指针的指针或三维数组
int(*b3)[30][20]; //三级指针――>指向三维数组的指针;
int (**p)[2]=new (int(*)[3])[2];
p[0]=new int[2][2];
p[1]=new int[2][2];
p[2]=new int[2][2];
delete [] p[0];
delete [] p[1];
delete [] p[2];
delete [] p;
注意此地方的指针类型为int (*),碰到这种问题就把外边的[2]先去掉,然后回头先把int ** p=new int(*)[n]申请出来,然后再把外边的[2]附加上去;
p 代表了一个指向二级指针的指针,在它申请空间的时候要注意指针的类型,那就是int (*)代表二级指针,而int (**)顾名思义就是代表指向二级指针的指针了。既然是指针要在堆里申请空间,那首先要定义它的范围:(int(*)[n])[2],n 个这样的二级指针,其中的每一个二级指针的最低维是2个元素.(因为要确定一个二级指针的话,它的最低维数是必须指定的,上边已经提到)。然后我们又分别 为p[0],p[1],p[2]…在堆里分配了空间,尤其要注意的是:在释放内存的时候一定要为p[0],p[1],p[2],单独delete[] ,否则又会造成内存泄露,在delete[]p 的时候一定先delete p[0]; delete p[1],然后再把给p申请的空间释放掉 delete [] p ……这样会防止内存泄露。
函数指针:
int a();这个一个函数的声明;
int (*b)();这是一个函数指针的声明;
unsigned psize = sizeof (int (*) ()); 获得函数指针的大小
指针函数:指针函数是指带指针的函数,即本质是一个函数。(函数是放函数入口地址的常量。)
float *find();
函数指针:
是指向函数的指针变量,因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。
int (*ptr)();//指向函数的指针变量没有++和--运算,用时要小心。