未初始化和非法的指针

下面这个代码说明了一个极为常见的错误:

int  *a;

...

*a = 12;

警告:究竟a应该指向哪里。我们声明了这个变量,但从未对它进行初始化,所以我们没有办法预测12这个值存储于什么地方。从这一点看,指针变量和其他变量并无区别,如果变量是静态的,它会被初始化为0.但如果变量是自动的,它根本不会被初始化。无论哪种情况,声明一个指向整形的指针都不会创建用于存储整型值的内存空间。


NULL指针

标准定义了NULL指针,它作为一个特殊的指针变量,表示不指向任何东西。要使一个指针变量为NULL,你可以给它赋一个零值。为了测试一个指针变量是否为NULL,你可以将它与零值进行比较。之所以选择零这个值是因为一种源代码约定,就机器内部而言,NULL指针的实际值肯呢过与此不同。在这种情况下,编译器将负责零值与内部值之间的翻译转换。

NULL指针的概念是非常有用的,因为它给了你一种方法,表示某个特定的指针目前尚未指向任何东西。例如,一个用于在某个数组中查找某个特定值得函数可能返回一个指向查找到的数组元素的指针。如果该数字不包含指定条件的值,函数就返回一个NULL指针。这个技巧允许返回值传达两个不同片段的信息。首先,有没有找到元素,其次,如果找到,它是哪个元素。


对指针进行解引用操作可以获得它所指向的值,但从定义上看,NULL指针并未指向任何东西,因此,对一个NULL 指针进行解引用操作是非法的,在对指针进行解引用操作之前,你首先必须确保它并非NULL指针。


其实如果声明一个数组的话,默认会赋值为0!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值