(七)数据的向导:指针
来源:互联网 发布:淘宝零食店加盟 编辑:程序博客网 时间:2024/04/27 04:12
1、空指针:int *p=0;
空指针中,在C中指NULL,但C++中指的是0。因此,在C++中判断是否空指针,与0比较即可。
2、char *p="abc"; 在常量区
char p[]="abc“;在栈区
3、[]与()同级,比*高。
const int a=3; 最终的内容是常量
const int *p=&a; 指向常量内容的指针, 指向常量的指针:常量指针
int *const p=&a; 指针是常量(const p) , 指针常量 仍是指针,但指针是常量,指针不能变化
const int *const p=&a; 指向常量的常量指针。指针本身是常量,指向的内容也是常量,前后夹击,一点都不能改变。
4、指针数组: *a[10] 先p[] 是数组,再*由指针组成。指针数组:由指针构成的数组。
数组指针:(*a)[10] []与(()同级,左向右,先()故是指针,再数组。数组指针:即指向一个数组的指针。
5、数组与指针
特别注意的是,三维数组指针,对于a[3][4][4],其中的a[2][2][2]从顺序上来说在a+2X3+2X4+2处,但是从类型上来说C++检查得十分严格。
比如a[2][2][2],用指针表示为:*(*(*(a+2)+2)+2) 二纵高,二横行,二横列上
但若*(a+2X3+2X4+2)则只是表示是*(a+16)纵高处的第一个元素的地址。
6、string是C++,<cstring>是兼容C的C++,主要函数有:
strcat(char *p,const char* p2)
strcat(char *p1,const char* p2,unsigned int Len2)
char name[50]="Bing";
char surname[ ]="Crosby";
strcat(name," ");
strcat(name,surname);//必须测定name是否容纳下surname,sizeof(name)/sizeof(name[0] > strlen(name) +strlen(surname)
还有复制:strcpy()、比较strcmp( )、搜索strchr( )
7、堆(heap)栈(stack)
除了静态变量在特殊的一小块内存(最低地址)外,就是堆(稍高于静态地址),然后再是栈(最高地址),堆是由低到高进行分配,栈是由高到低进行分配。
因此两都都是面向进行分配。
平时的基本数据类型是在栈中,当用new时,就在堆中进行分配。用delete就是释放堆中的空间(本身所指的地址并没变化)。
int *p=new int(3);
cout<<p<<endl;
delete p;
cout<<p<<endl;//可以看到两个p的地址是一样的,尽管已经释放了。因此P此时是一个垃圾指针,,为了避免,就接一句让它置空
p=0; //指针置空。
8、动态分配数组应注意的事项:
1、删除时,应加空方括号:
int *p=new int[100]; //不能初始化
delete [ ] p;
2、动态分配不能直接初始化只能显示的初始化。
9、动态分配的毛病:内存泄露和内存碎片
一、内存泄露:
当动态分配后,没有释放,但这个指针就改变了方向。而堆中原分配的内存已经“标记”上占用,造成这部分内存无法释放。
当动态分配后,由于过了作用域,这个指针“消亡”了,同样分配的内存仍然在占用无法释放。
二、内存碎片
在动态分配中,有些不断在分配,有些不断在释放,造成堆中的内存区域并不是连续的占用,这就是碎片,与磁盘碎片一样。
唯一不同的是,当再次分配一个大的内存块时,它只能选取能连续容纳的内存块,如果分配不出这个内存块,就会分配失败。
10、reinterpret_case<类型>(表达式) 强制转换成任意类型。因此很危险的操作,比如把指针强制转为整形,把整形强制转换成指针。
reinterpret:重新解释 interpret:解释
- (七)数据的向导:指针
- 【翻译】数据表单向导的快速实现
- 数据窗体向导创建窗体的问题
- 第10章 指针(七) 应用1------函数间数据的双向传递
- VS2005数据窗体向导
- C与指针 七 探讨指向指针的指针
- 使用itemEditor改进数据向导生成的Flex应用
- 使用Validator改进数据向导生成的Flex应用
- 使用Validator改进数据向导生成的Flex应用
- 指向指针数据的指针
- SharePoint Framework 企业向导(七)
- 深入理解 C++ 指针(七)---指针和函数的关系
- [指针七]函数指针的用法--函数回调
- 七、id类型的数据
- opencv的数据指针
- PostgreSQL的数据存储(七)---数据存储
- STL向导阅读②----智能指针
- vs2005的ATL向导
- ETW是什么架构|Event Tracing for Windows
- Head First 之策略模式笔记
- TC SRM 554
- opencv 图像阴影检测
- 托盘程序导致无法注销或关机
- (七)数据的向导:指针
- OpenGL-光照模型
- head first 设计模式总结(一)策略模式
- CUDA程序开发
- OpenGL-绘制管线
- OpenGL-鼠标交互
- 错误 1 error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup 中被引用 M
- OpenGL-显示列表
- 1484 Blowing Fuses