数据结构基础笔记001 指针和动态存储分配

《数据结构基础》
作者: [美]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返回类型以后可能被解释为指针。

你可能感兴趣的:(数据结构基础笔记001 指针和动态存储分配)