指针
来源:互联网 发布:hecras软件 编辑:程序博客网 时间:2024/06/06 01:40
指针就是指向变量的地址:
int *p (*是指声明的意思—声明一个P指针)及如果没有指向的东西,称为野指针。
如何杜绝野指针:
int*p=&a; int*p=null 把NULL赋值给P;
悬空指针:是指针最初指向的内存已经被释放了的一种指针。
如果两个指针(p1和p2)指向同一块内存区域, 那么free(p1)后,p1和p2都成为悬空指针。如果进一步将p1设置为NULL, 那么p2还是悬空指针。诚然,使用*p1会导致非法内存访问,但是使用*p2却会出现无法预料的结果,可谓防不胜防。例如:
1 #include <stdlib.h>2 int main(int argc, char *argv[])3 {4 int *p1 = (int *)malloc(sizeof (int));5 int *p2 = p1; /* p2 and p1 are pointing to the same memory */6 free(p1); /* p1 is a dangling pointer, so is p2 */7 p1 = NULL; /* p1 is not a dangling pointer any more */8 return (*p2 & 0x7f); /* p2 is still a dangling pointer */9 }
指针的分类:
*p 一级指针
**a 二级指针
***b 三级指针
.
.
.
一级指针指向变量的地址,二级直指向一级指针的地址,三级指针指向二级指针的地址.................
(* & 和变量的结合顺序为从右向左 )
void main
{
int a=10,b=20;
int*p=&a;
int**s=&p;
}
&p 0x0012ff10 &s 0x0012ff04
p=>0x0012ff28 s=>0x0012ff10
*p=>a *s=>0x0012ff28=>p
&*p=>&a **s=>*p=>a
*&p=>&a
&**s=>&*p=>&a <=> **&s=>*&p=>&a
指针的大小
在VS中不管是几级指针的大小都为四字节(因为指针是用来存放变量首地址的)
派生类指针和基本类型是不能转化的:
1. 类型决定指针+1的能力和决定内存的内容的理解角度不同表达的内容就不同。
如果将int a=0x22225;
char*p=&a;
(如果这样赋值的话,堆内存大人内容解释成了随意值。是不允许的)
如果要转也是要强转
char*p=(char*)a;
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- 指针
- openstack创建实例失败,bug(1)解决办法
- 【BzoJ 4719】【Noip2016】【天天爱跑步】【lca】【方程移项】【桶排优化】
- 第七周 项目四-队列数组
- 如何做好一个数据分析师?
- 洛谷P1084:疫情控制 (二分答案+倍增+贪心)
- 指针
- 使用字节流复制文件过程中容易导致复制的文件无法使用(如MP3文件比原来大了一千多倍且音乐无法播放)很严重的一个bug
- IFE-TASK11(任务十一:移动Web页面布局实践)
- 菜鸟先飞之JAVA_反射
- OpengGL
- java多线程中死锁实例
- Partition Equal Subset Sum问题及解法
- Matlab GUI图形化界面,坐标
- JavaScript中判断对象类型的几种方法总结