指针判空

指针判空

代码中遇到了太多判空的处理,真的绕晕了
整理一下
- 指针
- 数组
- NULL
- ‘\0’
- ‘\r’
- ‘\n’


空指针

空指针不指向任何实际的对象或者函数

char *ptr = NULL;
char *p1 = 0;

    printf("p1 %s\n",p1);
    printf("ptr %s\n",ptr);

输出的结果:
p1 (null)
ptr (null)

给指针值赋零则使它不再指向任何有意义的东西。为了提高程序的可读性,标准库定义了一个与0等价的符号常量NULL. 程序里可以写 p = 0; 或者 p = NULL;

野指针

“野指针”不是空指针,是指向“垃圾”内存的指针。其地址是不能被有效利用的内存,是不合法的内存。
指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。
二、指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。别看free和delete的名字恶狠狠的(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。

参考:http://www.cnblogs.com/losesea/archive/2012/11/16/2772590.html

空数组

  一个长度为0的数组我们称之为“空数组”,空数组是一个真正的对象,只是包含元素个数为0。
  空数组即下标为0的数组,如a[0]。在函数中声明空数组是没有任何意义的,当然也编译不过。而在类或结构体中,是可以这样声明的。

struct ast_exten {
char *exten;
char stuff[0];
};
又如:
struct ast_include {
char *name;
char *rname;
char stuff[0];
};
struct ast_ignorepat {
const char *registrar;
struct ast_ignorepat *next;
char pattern[0];
};

这是个广泛使用的常见技巧,常用来构成缓冲区。比起指针,用空数组有这样的优势:
1.不需要初始化,数组名直接就是所在的偏移
2.不占任何空间,指针需要占用int长度空间,空数组不占任何空间。

NULL

NULL 在c中用(void*)0表示,在c++中用0表示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值