当前位置: 首页 > news >正文

c++指南 -指针和引用

指针和引用

指针的基本概念

指针是存储另一个变量的内存地址的变量。指针变量的声明包括指针类型和星号 (*)。

int* ptr; // ptr 是一个指向 int 类型的指针

指针操作

初始化:将指针设置为变量的地址。

int var = 10;
int* ptr = &var; // ptr 现在存储 var 的地址

解引用:通过指针访问其指向的内存中存储的值。

std::cout << *ptr; // 输出 10

指针的指针:一个指针可以指向另一个指针。

int ***pptr = &ptr; // pptr 是一个指向 int* 类型的指针

引用

引用是另一个变量的别名,它为变量提供了一个替代名称。

int original = 5;
int& ref = original; // ref 是 original 的引用

引用的特点

引用必须在声明时被初始化。
引用初始化后不能改变其指向的变量。
引用本身不占用内存空间,它只是原有变量的一个名字。

动态内存分配

动态内存分配允许程序在运行时请求内存,并在不再需要时释放内存。这通过 new 和 delete 操作符实现。

使用 new 分配内存

int* dynamicInt = new int; // 分配一个 int 类型的内存
*dynamicInt = 10; // 初始化分配的内存

使用 delete 释放内存

delete dynamicInt; // 释放之前分配的内存
dynamicInt = nullptr; // 将指针设置为 nullptr 是一个好习惯
数组的动态内存分配
int* dynamicArray = new int[10]; // 分配一个包含10个 int 的数组
delete[] dynamicArray; // 释放数组内存

动态内存和指针
动态分配的内存必须手动释放,否则会导致内存泄漏。
使用 new 表达式分配的内存地址赋给指针时,指针指向这块内存。

智能指针

C++11 引入了智能指针,如 std::unique_ptr 和 std::shared_ptr,它们自动管理内存,减少内存泄漏的风险。

#include <memory>std::unique_ptr<int> smartPtr(new int); // 创建一个智能指针
*smartPtr = 20; // 使用解引用操作符// 智能指针在离开作用域时自动释放内存

理解指针和引用对于深入学习C++至关重要,它们提供了对内存的直接控制,但也需要谨慎使用以避免错误。动态内存分配是一个强大的工具,但使用不当也可能导致内存泄漏和其他问题。智能指针提供了一种更安全的方式来管理动态分配的内存。

http://www.lryc.cn/news/428549.html

相关文章:

  • [CISCN 2023 华北]ez_date
  • 前端不同项目使用不同的node版本(Volta管理切换)
  • Ropdump:针对二进制可执行文件的安全检测工具
  • Quartz - 定时任务框架集成
  • GoModule
  • SQL - 数据库管理
  • 密码学之AES算法
  • GitHub每日最火火火项目(8.20)
  • (五)Flink Sink 数据输出
  • Spring 注入、注解及相关概念补充
  • 【Linux多线程】线程安全的单例模式
  • 基于jqury和canvas画板技术五子棋游戏设计与实现(论文+源码)_kaic
  • 指针 (四)
  • 便利店(超市)管理系统设计与实现(源码+lw+部署文档+讲解等)
  • Excel中的“块”操作
  • yolo V8训练 长条状目标
  • 数据结构与算法 - 设计
  • 62 网络设备的暗藏的操控者SNMP
  • 华硕飞行堡垒键盘全部失灵【除电源键】
  • 前端字符串将其分割成长度为 32 的子字符串数组
  • 小学二年级数学精选试题
  • 练习题 - 探索正则表达式re功能
  • 【Oracle 11G 配置使用教程1】
  • 【ubuntu24.04】docker pull 配置
  • 《机器学习》—— 通过下采样方法实现银行贷款分类问题
  • Synchronized重量级锁原理和实战(五)
  • linux常用网络工具汇总三
  • Linux中nano编辑器详解
  • 26-vector arraylist和linkedlist的区别
  • 20-redis穿透击穿雪崩