C陷阱与缺陷之空指针并非空字符串

除了一个重要的例外情况,在C语言中将一个整数转换为一个指针,最后得到的结果都取决于具体的C编译器的实现。这个特殊情况就是常数0,编译器保证由0转换而来的指针不等于任何有效的指针。出于代码文档化的考虑,常数0这个值常用一个符号来代替:

当然无论是直接用常数0,还是用符号NULL,效果都是相同的。需要记住的重要一点是,当常数0被转换为指针使用时,这个指针绝对不能被解除引用(dereference)。换句话说,当我们将0赋值给一个指针变量时,绝对不能企图使用该指针所指向内存中存储的内容。下面的写法是完全合法的:

但是如果要写成这样:

就是非法的了,原因在于库函数srcmp的实现中会包括查看它的指针参数所指向内存中内容的操作。

如果是一个空指针,即使

的行为也是未定义的。而且,与此类似的语句在不同的计算机上会有不同的效果。

未经允许不得转载:TacuLee » C陷阱与缺陷之空指针并非空字符串

赞 (1)

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址