C++ 指针和NULL

本文详细介绍了C++中指针的概念及其在定义时如何分配地址内存而不分配内容内存的特点。同时阐述了如果不初始化指针,其地址指向不确定性及可能产生的编译错误。此外,还解释了NULL在指针初始化中的作用,即阻止对数据的读写操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++ 指针,在定义的时候分配地址的内存,而不分配内容的内存。如果你不初始化指针,地址的指向不确定,会编译错误

NULL,在初始化指针的时候,NULL的作用是使指针无法进行数据的读、写操作

### C++指针指向 `NULL` 与指针释放的区别 在 C++ 编程中,处理动态分配内存时经常遇到两个概念:将指针设置为 `nullptr` 释放指针所指向的内存。这两个操作虽然都涉及指针管理,但在语义技术实现上有显著差异。 #### 将指针设为 `nullptr` 当一个指针被赋值为 `nullptr` 或者旧标准中的 `(void*)0` 或宏定义 `NULL` 时,这仅仅表示该指针当前不指向任何有效的对象或内存位置[^1]。这种做法通常用于标记某个时刻之后不再使用的资源,防止悬空指针(dangling pointer),即试图访问已经被删除的对象的情况发生。 ```cpp int* p = nullptr; if (p != nullptr) { // 安全检查逻辑... } ``` #### 指针释放 (`delete`) 另一方面,调用 `delete` 运算符会真正回收由 `new` 分配出来的堆上空间,并执行析构函数(如果有的话)。这意味着不仅清除了实际的数据存储区域,还可能触发额外的动作来清理关联状态。一旦完成此过程,则不能再通过原来的指针访问这块已被释放掉的空间;否则可能导致未定义行为。 ```cpp int* q = new int(42); // 使用q... delete q; // 此处应确保只做一次销毁动作 q = nullptr; // 防止后续误用已释放的指针 ``` 需要注意的是,在现代 C++ 实践里推荐使用智能指针如 `std::unique_ptr`, `std::shared_ptr` 来自动管理生命周期复杂的对象实例,从而减少手动管理潜在错误的风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值