《数据结构基础》
作者: [美]Ellis Horowitz 霍罗维兹
译者: 朱仲涛
出版社: 清华大学出版社
ISBN: 9787302186960
在 豆瓣读书 中查看本书
指针
- C允许指针做算数运算,包括加减乘除。
- 指针之间可以做比较,结果返回大于、小于、相等三者之一。
- 指针还可以通过强制显式地转换成整数。
- 指针变量的长度可以是不同值,指向char的指针变量也许比指向float的指针变量长度更长。
- C用特殊的值
NULL
表示空指针。对于具体系统,空指针用整数值0
表示。C中NULL
是一个宏,具体实现就定义为常量值0
。空指针可用在关系表达式中,表示布尔量“假”,因而测试空指针的语句可以是:
if(p==NULL)
或者更简洁:
if(!p)
动态存储分配
- 动态存储分配在系统堆(heap)中。
-
malloc
在程序中很常见,方便的方法是一定宏语句。一种实现:
#define MALLOC(p,s)\
if( !(p)=malloc(s)) ){\
fprintf(stderr,"Insufficient memory");\
exit(EXIT_FAILURE);\
}
- 悬空引用(dangling reference):指向存储空间A的指针被赋值后,指向存储空间B。存储空间A中所存储的值对程序而言,就丢掉了。
- 好习惯:让所有尚未指向实际目标的指针都取
NULL
。以尽量避免访问一块尚未申请的空间,或访问一块无权访问的空间。 - 好习惯:在转换指针类型时,显式地使用强制类型转换。
float * p=(float*)malloc(sizeof(float));
- 好习惯:明确指定函数的返回类型。很多系统中,指针类型的大小和
int
类型大小相同,函数返回类型没有显式定义,int
返回类型以后可能被解释为指针。