高质量C编程07-指针及链表
2016-05-13 13:15
246 查看
1.指针6个基本点
①变量②存地址
③sizeof = 4 (64位下 sizeof = 8)
④指针类型(作用:决定用什么视角看该块内存)
⑤偏移(按指针的类型偏移)
⑥加
*才有意义
2.指针的使用
①使用指针变量之前确保该指针变量指向一个合法可用的内存单元②指针变量与零值比较的问题
#define NULL ((void*) 0) if (NULL == p)
③指针只有以下几种算术运算
p ± n; //将指针偏移n个数据单位(指针指向的类型) ++p/p++; --p/p--; p1-p2; //两指针之间的数据个数,而不是指针的地址之差
3.二级指针-指向指针的指针
4.多级指针-误区
char **p1; //普通的二级指针 char (*p2)[5]; //指针,指向char[5]数组的指针 char *p3[5]; //数组,以char *为元素的指针数组
5.用指针处理链表
(1)链表
①链表有一个”头指针”变量,head,它存放指向下一个元素的地址
②链表中每一个元素称为结点,结点包含两个部分:
用户所需数据
下一个结点地址
③最后一个元素,即表尾,它的地址部分放一个
NULL
(2)链表的定义
struct Student { char name[10]; int num; float score; struct Student *next; }
(3)建立动态链表
struct Student *head; struct Student *p; p = (struct Student *)malloc(sizeof(struct Student)); head = (struct Student *)malloc(sizeof(struct Student)); if (NULL == head) { printf("Memory create error!\n"); return 1; }
6.指针在函数中出现的位置
①出现在返回值处如:
char *strcpy(char *,const char *);
②出现在函数名的位置
如:
char *(*pstrcpy)(char *,const char *)
定义了一个函数指针
③出现在形参表中
如:
void fun(int *p)
当数组作形参时,等价于用指针作形参
7.函数指针
(1)函数的定义
返回值类型 函数名(参数表) { 函数体 }
说明:
编译后,函数就是一段段的机器码,函数名就是这段机器码的首地址(函数入口地址),是个地址常量.
函数名是地址,地址又可以给指针复制,所以可以让指针指向函数.
函数的类型,由形参和返回类型共同决定.
(2)函数指针的使用
通过函数指针来调用所指向的函数,函数指针可以指向所有具有相同函数类型的函数.①给函数指针赋值
pf = 函数名;
②使用函数指针来调用函数
(*pf)(实参列表)
③其它对于函数指针的操作都是没有意义
如
pf++; pf1-pf2;
8.野指针
(1)定义
野指针是未指向合法内存的指针(2)产生原因
①指针变量没有被初始化.指针变量刚被创建时不会自动成为NULL指针,此时它的值是垃圾值
②指针被
free之后,没有置位
NULL
③使用
NULL指针(代码区,不可写)
④指针操作超越了变量的作用范围(数组越界)
(3)如何避免野指针产生
①使用指针前一定要保证它指向了有效的合法空间②用
malloc申请内存后,应立即检查指针是否为
NULL
③用
free释放内存后,立即将指针置为
NULL
④避免数组或指针的下标越界
相关文章推荐
- eclipse 中java compiler level does not match the version of the installed java project face问题
- C++中两种常用的记录程序运行时间的方法的总结
- Java秘术:用枚举构建一个状态机
- C语言获取文件长度及全部内容
- C++ 引用
- python数据分析1:获取双色球历史信息
- 灰帽子python 读书笔记 1
- c#PictureBox画直线 矩形
- google浏览器截图工具 Open Screenshot(代码截图)
- Python配置OpenCV
- PHP简单实现无限级分类的方法
- C++ 常量指针 指向常量的指针
- C#学习笔记之在DataGridView上显示数据
- Dev C++ 的一些编辑文本的实用小技巧
- python画词云图(电商评论数据)
- 在 阿里云服务的 WinServer 2012 上部署ASP.net 网站
- java时钟和计时器
- springMVC 返回类型选择
- 基础知识:四、 ContentProvider
- Eclipse 插件打包注意问题之导出错误