c++——指针(介绍)

一、指针 (Pointer)

1. 指针的概念

  • 看个屁的概念

2. 指针的基本操作:寻址和取值

  • & (取址运算符): 获取存储址,返回变量在内存中的起始位置。

    ini 复制代码
    int a = 10;
    int *pa = &a; // pa 存储了变量 a 的内存地址
    
    `&a` 运算的结果就是变量 `a` 在内存中的地址。
  • * (声明指针变量): 在声明变量时,* 表明你声明的是一个指针变量,它用来存储内存地址。

  • * (解引用运算符): 访问指针所指向的内存地址中的值。

    c 复制代码
    int a = 10;
    int *pa = &a;
    std::cout << *pa << std::endl; // 输出 10,即 pa 指向的内存地址中存储的值

3. 指针的初始化和空指针:避免野指针

nullptr 是空指针常量,表示指针不指向任何有效的内存地址。

将指针初始化为 nullptr 是一种良好的编程习惯。

go 复制代码
int *pp = nullptr;` 明确地表示指针 `pp` 当前没有指向任何有效的 `int` 型变量。
  • 检查空指针:

在使用指针之前,检查指针是否为 nullptr,以避免访问无效内存。

c 复制代码
int *ptr = get_some_pointer(); // 假设 get_some_pointer 可能返回 nullptr
if (ptr != nullptr) {
    // 指针有效,可以安全使用
    std::cout << *ptr << std::endl;
} else {
    // 指针为空,处理错误情况
    std::cout << "指针为空!" << std::endl;
}

4. 多级指针:指向指针的指针

  • 二级指针: 指向指针的指针。

    ini 复制代码
    int a = 10;
    int *pp = &a;  // pp 指向 a 的地址
    int **pp2 = &pp; // pp2 指向 pp 的地址
    
    `pp2` 存储的是指针 `pp` 的内存地址。
  • 三级指针: 指向二级指针的指针。

    ini 复制代码
    int ***pp3 = &pp2;

5. void 指针:通用的指针

  • 可以指向任何类型: void * 是一种特殊的指针类型,它可以指向任何类型的变量的内存地址。
ini 复制代码
int n = 10;
float f = 3.14;
void *vp;
vp = &n;  // void 指针可以指向 int
vp = &f;  // void 指针也可以指向 float
  • 不能直接解引用: 由于 void 指针不知道它指向的数据类型,因此不能直接使用 * 解引用。需要先将其强制转换为具体的指针类型才能访问其指向的值。

    c 复制代码
    int n = 10;
    void *vp = &n;
    int *ip = static_cast<int*>(vp); // 强制转换为 int*
    std::cout << *ip << std::endl;    // 现在可以解引用了
  • void 作为函数返回类型: 表示函数不返回任何值。这与 void 指针是不同的概念。

相关推荐
IT_陈寒1 小时前
⚡️Vite 5重磅升级:10个性能优化技巧让你的项目提速300%!🚀
前端·人工智能·后端
vivo互联网技术2 小时前
vivo 浏览器福利体系架构演进之路
后端·数据一致性·可扩展·大流量·可复制
aloha_2 小时前
mysqldump 操作手册
后端
程序员爱钓鱼2 小时前
Go语言实战案例-项目实战篇:编写一个轻量级在线聊天室
开发语言·后端·golang
数据知道2 小时前
Go基础:Go语言中的指针详解:在什么情况下应该使用指针?
开发语言·后端·golang·指针·go语言
我是前端小学生2 小时前
Poetry:Python 开发者的依赖管理与项目利器
后端·python
华仔啊2 小时前
SpringBoot 中的 7 种耗时统计方式,你用过几种?
java·后端
yeyong3 小时前
如何找到一个陌生服务器上的grafana-server是谁启动的
后端
小蒜学长3 小时前
springboot宠物领养救助平台的开发与设计(代码+数据库+LW)
java·数据库·spring boot·后端·宠物
武子康3 小时前
大数据-106 Spark Graph X案例:1图计算、2连通图算法、3寻找相同用户 高效分区、负载均衡与迭代优化
大数据·后端·spark