神奇的NULL

NULL字符

在ASCII码的第一个字符是NULL,它的数值是0,占用1 字节 ;C语言把它作为字符串的最后一个字符,以表示字符串到此结束."\0"
NULL指针
在C语言的头文件 stddef.h 中,NULL的定义如下:
#define NULL
#define __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
#interface NULL 0
        可见,NULL 指针 是一个无类型指针,并且值为0。一个 指针 ,拥有2个属性--地址值和指针类型。两者的作用是:
             1,地址值标识 变量 的首地址(32位系统下 指针 的地址值占4字节);
             2,指针类型告诉 编译器 ,应该怎样进行接下来的数据访问(int型 数组 和float型数组是不同的;数组访问与 结构体 访问也是不同的;等等)。
       NULL的出现是一种约定俗成,事实上它不是C语言中的关键字;把一个 指针 赋值为NULL,通常的说法是“将指针悬空”。这样, 指针 就无法再进行任何数据访问了。编程工作中有一类比较容易犯的错误-- 指针 地址未进行正确的更新赋值就加以使用,这往往会造成很严重的后果(对内存区进行错误的涂抹)。所以一个良好的习惯是,当一个 指针 的工作稍事休息,先把它赋值为NULL,待到再度使用时,重新对其赋值以及进行指针类型转化。
      前面说到“NULL 指针 无法再进行任何数据访问”,其实是视 编译器 功能而定的。0位置指向的是程序起始,对于不同的 编译器 ,NULL 指针 的操作结果是不同的:有些是不准读写,有些是只读,甚至读写都允许。 编译器 是人定的。引用网友win_hate在话题“关于NULL的不严谨”中的话来说:“如果说有谁不严谨了,那必定是读取0位置的程序员,而不是C。C的设计哲学之一是:‘程序员知道自己在干什么--没有安全带’”。
     用NULL的话,很多系统都是对NULL内存单元保护的,你根本不能改写,甚至都不可以读取
你在初始化去指定指针指向特定的内存单元虽然也可以,但是你知道那个内存单元有没有被其他程序占用么?又没有可能是操作系统在占用,这样话,万一改写,很可能会导致系统崩溃,所以最安全的话,还是指向一个自己已知的某个相关类型的变量,或者是干脆用mallco申请一个相关类型的变量的空间
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值