c++中未初始化的指针不等于NULL

本文展示了一个简单的C++程序示例,用于演示如何检查指针是否被初始化为NULL,并根据检查结果输出不同的信息。通过这个例子,读者可以了解基本的指针使用和条件判断语句。

#include<iostream>
int main()
{
    int * ip;
    if(ip == NULL)
    {
        std::cout<<"NULL"<<std::endl;
        return 0;
    }
    std::cout<<"NO"<<std::endl;
    return 0;
}

C++中,将初始化指针赋值为`NULL`(或更推荐的`nullptr`)是可行且相对安全的做法,但其安全性取决于后续的使用方式。指针在声明时若被显式初始化,其值是定义的,可能指向任意内存地址。这种状态下的指针被称为“野指针”,直接解引用会导致定义行为,可能导致程序崩溃或数据损坏[^1]。 通过将初始化指针显式赋值为`NULL`或`nullptr`,可以确保该指针处于一个已知状态——即指向任何有效的对象或函数。这种做法有助于在运行时检测指针是否有效,例如通过条件判断: ```cpp int* ptr = nullptr; if (ptr) { // 会执行,因为ptr为nullptr *ptr = 10; // 避免在此处解引用 } ``` 这种方式使得在指针被赋予有效地址前,程序会尝试访问其指向的内容,从而避免了定义行为的发生[^2]。 然而,需要注意的是,即使指针被赋值为`nullptr`,如果在重新赋值之前尝试解引用,仍然会导致定义行为。例如: ```cpp int* ptr = nullptr; *ptr = 20; // 错误:解引用空指针 ``` 该操作会尝试向空指针所指向的地址写入数据,通常会导致程序崩溃。因此,虽然将初始化指针赋值为`nullptr`可以提高程序的健壮性和可调试性,但这并意味着可以忽视后续的正确赋值和使用检查[^1]。 现代C++推荐使用`nullptr`而非`NULL`,因为`nullptr`具有更好的类型安全性,并且能够被编译器更准确地处理。例如,在重载函数选择中,`nullptr`可以正确匹配指针类型的参数,而`NULL`(通常定义为整数0)可能会导致歧义[^3]。 ### 示例代码 以下是一个安全使用初始化指针并将其赋值为`nullptr`的示例: ```cpp #include <iostream> int main() { int value = 10; int* ptr = nullptr; // 初始化为空指针 ptr = &value; // 安全赋值 std::cout << "*ptr = " << *ptr << std::endl; // 安全解引用 return 0; } ``` 此代码在赋值之后才进行解引用操作,因此会引发定义行为。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值