c/c++中空指针,空指针常量,NULL

如何是一个指针变量成为空指针:

如果 p 是一个指针变量,则 p = 0;、p = 0L;、p = ‘\0’;、p = 3 - 3;、p = 0 * 17; 中的任何一种赋值操作之后(对于 C 来说还可以是 p = (void*)0;), p 都成为一个空指针,由系统保证空指针不指向任何实际的对象或者函数。

NULL: 是一个标准规定的宏定义,用来表示空指针常量。用 p = NULL; 来使 p 成为一个空指针。

空指针的判断:指针变量 p 是空指针的判断:

if ( p == 0 )

if ( p == ‘\0’ )

if ( p == 3 - 3 )

if ( p == NULL ) /* 使用 NULL 必须包含相应的标准库的头文件 */

if ( NULL == p )

if ( !p ) <—————(这里和下面的if(p)都被专门说过一次,null定义不一定是0.这里如果贸然使用!p会很危险的.所以这种写法不能被提倡)

指针变量 p 不是空指针的判断:

if ( p != 0 )

if ( p != ‘\0’ )

if ( p != 3 - 3 )

if ( p != NULL ) /* 使用 NULL 必须包含相应的标准库的头文件 */

if ( NULL != p )

if ( p )

if ( p != q )

时间: 2024-10-29 02:43:07

c/c++中空指针,空指针常量,NULL的相关文章

野指针 空指针 通用指针

空指针是一个特殊的指针值,也是唯一一个对任何指针类型都合法的指针值.指针变量具有空指针值,表示它当时处于闲置状态,没有指向有意义的东西.空指针用0表示,C语言保证这个值不会是任何对象的地址.给指针值赋零则使它不再指向任何有意义的东西.为了提高程序的可读性,标准库定义了一个与0等价的符号常量NULL.    程序里可以写 p = 0;     或者 p = NULL; 两种写法都把p置为空指针值.相对而言,前一种写法更容易使读程序的人意识到这里是一个指针赋值.操作NULL也会导致不可预知的错误 我

C 指针&&表达式&&常量

一.指针 在计算机语言中,由于通过地址能找到所需的变量,可以说地址指向该变量单元,因此把地址形象的称为'指针',意思是能通过它来找到以它为地址的内存单元. 1.1.指针&&变量 指针变量与普通变量一样,使用之前不仅要定义说明而且必须要赋具体的值,未经赋值的指针变量不能使用:可以对指针变量初始化为NULL,但是不能对值为NULL的指针变量解引用. 如下定义一个指针变量p指向a,这样就可以通过p访问a并对a进行操作. int a=0; int *p=NULL; p=&a; *p=10;

指针初始化为NULL的作用

关于空指针NULL.野指针.通用指针,首先说一下什么是指针,只要明白了指针的含义,你就明白null的含义了. 假设 有语句 int a=10;那么编译器就在内存中开辟1个整型单元存放变量a,我们假设这个整型单元在内存中的地址是 0x1000:那么内存0x1000单元中存放了数据10,每次我们访问a的时候,实际上都是访问的0x1000单元中的10.现在定义:int *p:                 p=&a:当编译器遇到语句int *p时,它也会在内存中给指针变量p分配一个内存单元,假设这个

为什么通过空指针(NULL)可以正确调用类的部分成员函数

#include <iostream> using namespace std; class B { public: void foo() { cout << "B foo " << endl; } void pp() { cout << "B pp" << endl; } void FunctionB() { cout << "funB" << endl; }

判断智能指针是否为 NULL

测试智能指针是否为 NULL 在Qt的项目中,osg里有智能指针 osg::ref_ptr<int> a; 然后可能和C++标准库不同 ,在判断智能指针是否为空的时候 以下来自与<More Effective C++> ,读了觉得很有收获 文尾有我看VS2019的MSVC2017中的头文件 和 osg的 但是有一件我们做不到的事情是"发现灵巧指针为 NULL": SmartPtr<TreeNode> ptn; if (ptn == 0) ... //

为什么delete指针后指针设为null

int *p;/*........*/delete p; p=null; 看代码的过程中,有这么一个疑问.删除了指针p,指针p既是不存在,怎么还能设置指针p为null呢?为什么还要设置为null呢? 后来得知计算机上删除数据的方式:删除数据(视频,音乐,文件等),计算机并不会把存储数据的硬盘区域(或者是内存)的内容擦除消去,而是将内容标记为可覆盖,这时候我们就不能再访问到数据,而这些可覆盖据数据会留在原来的硬盘区域直到被新的数据逐渐覆盖.(所以,删除了数据之后,只要没有对硬盘进行过多的操作,还是

1.枚举类型、声明指针、常量、存储类型、运算符优先级记忆

原文:1.枚举类型.声明指针.常量.存储类型.运算符优先级记忆 1.枚举类型 枚举(enumerated)类型就是指它的值为符号常量而不是字面值的类型,以下面的这种形式来声明:enum   Jar_Type {CUP,PINT,GALLON,OUART}; 这条语句声明了一个类型,称为 Jar_Type.而enum  {CUP,PINT,GALLON,OUART}; 这条语句声明表示这种类型的变量以整型的方式存储,这些符号名的实际值都是整型值.这里CUP是0,PINT是1,以此类推.下面看一下一

10深入理解C指针之---指针和常量

该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. 指针作为C语言的左膀右臂,使用方便,修改容易,引用数据快速都是很有前景的应用.C语言中常量是值不能改变的量,由于在某些应用中,想要阻止没有授权的数据的修改时,就需要将指针和常量结合起来. 一.指向常量的非常量指针:指针值可以改变,但是指针解引用值不能改变 1.特征: 1).提供一种可移植的方式来声明与系统中可寻址的内存区域一致的长度 2).用作sizeof操作符的返回值的类型 3).用作内存相

c语言结构体&amp;常指针和常量指针的区别

结构体: 关系密切但数据类型不尽相同, 常指针和常量指针的区别: char * const cp : 定义一个指向字符的指针常数,即const指针,常指针. const char* p : 定义一个指向字符常数的指针,即常量指针. char const* p : 等同于const char* p[2]. 理解:const char *p; 常量指针,指向一块区域,这块区域不可写,只能读.char * const p; 指针常量,指向一块区域,这块区域可读可写,但是指针的值初始后就不能改,类似于一