指针复习

指针数组:一个数组里存放的都是同一个类型的指针,通常我们把他叫做指针数组
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)();//指向函数的指针变量没有++和--运算,用时要小心。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值