C语言规则总结二

空指针(NULL)

1.        什么是空指针

在语言定义中,每种指针类型都有一个特殊值---“空指针”---它与同类型的其他指针都不同,它“保证与任何函数或对象的指针值都不相等”。

直白点就是说:它不指向任何地方,它不是任何对象或函数的地址。这样取地址符&对空指针无效。

 

空指针和未初始化的指针不同,未初始化的指针危害巨大,未初始化的指针乱起一气,所以俗称“野指针”!

 

2.        空指针的形成

语言定义:在指针上下文中的“值为0的整型常量表达式”会在编译时转换为空指针。

 

白话文:在初始化,赋值或者比较的时候,如果一边是变量或者指针类型的表达式,而另一边是0,那么编译器就会确定这是一个空指针,并且会生成正确的空指针值。下面的代码合法:

char *p = 0;

if( p != 0 )

 

如果需要在空指针作为函数的实参,那么需要进行显式的转换。

例如:

void f(int a, char *p)

{

}

         …

         void main()

{

int b;

f(b, (char *)0);

}

        

3.        空指针的应用

检查空指针是否有效的语法很多,不多原理都一样,下面都是合法的:

char *p = 0;

1if( p )

2if( p == 0 )

3if( p != 0 )

4if(!p)

4.        关于0和NULL

当请求了一个空指针时,无论我们写成了“0”还是NULL,编译器都生成适合机器的空指针的位模式。当请你尽量用NULL,这样大家都能刚好的明白这是一个空指针。

数组和指针

1.        指针和数组等价性

在C语言中指针和数组等价的意思是指针算术和数组下标运算等价,指针和数组是不同的。

 

实际上当我们定义了一个数组,比如a[2]时,编译器在编译时,就已经将其退化为一个指针a.

2.        指针和数组的区别:

数组是一个由(同一个类型的)连续元素组成的预先分配的内存块,而指针是一个对任何位置(特定数据类型)的数据元素的引用。

数组自动分配内存空间,但不能重新分配或改变大小。指针必须被赋值以指向被分配的内存空间(malloc也算),可以重新被赋值,当然指针还有其他很多用途。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值