06 C++指针与引用详解

 V信公众号:  程序员架构笔记

欢迎关注

指针的概念与使用

指针是C++中一种特殊的变量,它存储的是另一个变量的内存地址。通过指针,可以直接访问和操作该内存地址上的数据。

声明指针
int* ptr;  // 声明一个指向int类型的指针
初始化指针
int x = 10;
int* ptr = &x;  // ptr指向x的地址
使用指针
cout << *ptr;  // 输出ptr指向的值,即x的值(10)
*ptr = 20;     // 通过指针修改x的值
cout << x;     // 输出20

2. 指针与数组

数组名本质上是一个指向数组第一个元素的指针。可以通过指针来遍历数组。

数组与指针的关系
int arr[3] = {1, 2, 3};
int* ptr = arr;  // ptr指向数组的第一个元素

cout << *ptr;    // 输出1
cout << *(ptr + 1);  // 输出2
指针遍历数组
for (int i = 0; i < 3; i++) {
    cout << *(ptr + i) << " ";  // 输出1 2 3
}

3. 引用与指针的区别

引用是C++中的一种别名机制,它为已存在的变量提供了一个别名。引用与指针有相似之处,但也有重要区别。

引用与指针的区别:
  1. 初始化

    • 引用必须在声明时初始化,且不能改变其引用的对象。

    • 指针可以在声明时不初始化,并且可以随时指向不同的对象。

  2. 语法

    • 引用使用&符号声明,使用时不需要解引用操作符*

    • 指针使用*符号声明,使用时需要解引用操作符*

  3. 空值

    • 引用不能为nullptr,必须指向一个有效的对象。

    • 指针可以为nullptr,表示不指向任何对象。

示例:
int x = 10;
int& ref = x;  // ref是x的引用
int* ptr = &x; // ptr指向x

ref = 20;      // 修改x的值
cout << x;     // 输出20

*ptr = 30;     // 通过指针修改x的值
cout << x;     // 输出30

4. 动态内存分配:new 和 delete

C++允许在运行时动态分配内存,使用newdelete操作符来管理堆内存。

动态分配单个对象
int* ptr = new int;  // 动态分配一个int类型的内存
*ptr = 10;           // 给分配的内存赋值
delete ptr;          // 释放内存
动态分配数组
int* arr = new int[10];  // 动态分配一个包含10个int的数组
arr[0] = 1;              // 给数组赋值
delete[] arr;            // 释放数组内存
注意事项:
  • 使用new分配的内存必须使用delete释放,否则会导致内存泄漏。

  • 对于数组,必须使用delete[]来释放内存。

示例:
int* ptr = new int(5);  // 动态分配一个int并初始化为5
cout << *ptr;           // 输出5
delete ptr;             // 释放内存

int* arr = new int[3]{1, 2, 3};  // 动态分配并初始化数组
cout << arr[1];                  // 输出2
delete[] arr;                    // 释放数组内存

总结

  • 指针用于存储内存地址,可以通过指针间接访问和修改数据。

  • 数组名本质上是一个指针,指向数组的第一个元素。

  • 引用是变量的别名,必须在声明时初始化,且不能改变其引用的对象。

  • 动态内存分配使用newdelete来管理堆内存,避免内存泄漏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员架构笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值