c和c++中NULL和0的区别
"C和C++中NULL和0的区别" C和C++中NULL和0的区别是指针编程中一个常见的概念,理解这两者的区别对编写高质量的代码非常重要。 需要了解什么是空指针常量(null pointer constant)。根据C标准,空指针常量是一个整数常量表达式,值为0,或者是一个 cast 到 type void * 的表达式。例如,0、0L、'\0'、3 - 3、0 * 17 和 (void*)0 都是空指针常量。这意味着,在C语言中,空指针常量可以是多种形式的,但是系统选择哪种形式作为空指针常量是实现相关的。一般来说,C系统选择 (void*)0 或者 0 作为空指针常量,而C++系统由于存在严格的类型转换要求,void* 不能自由转换为其他指针类型,所以通常选择 0 作为空指针常量。 需要了解什么是空指针(null pointer)。空指针是一个指针,它的值是一个空指针常量。当一个空指针常量被转换为指针类型时,所得的指针是一个空指针,保证不等于任何对象或函数的指针。例如,如果 p 是一个指针变量,p = 0;、p = 0L;、p = '\0';、p = 3 - 3;、p = 0* 17; 等操作都可以使 p 成为一个空指针。 此外,需要了解什么是 NULL。NULL 是一个标准规定的宏定义,用来表示空指针常量。因此,除了上面的各种赋值方式之外,还可以用 p = NULL; 使 p 成为一个空指针。 此外,还需要了解空指针的内部实现。标准并没有规定空指针指向内存中的什么地方,具体的实现取决于系统。我们常见的空指针一般指向 0 地址,即空指针的内部用全 0 来表示(zero null pointer);也有一些系统用一些特殊的地址值或者特殊的方式表示空指针(nonzero null pointer)。 需要了解如何判断一个指针是否是一个空指针。这可以通过与空指针常量或者其他的空指针的比较来实现。例如,假设 p 是一个指针变量,q 是一个同类型的空指针,要检查 p 是否是一个空指针,可以采用多种形式的比较。