首页 > 编程语言 >C++指针详解

C++指针详解

时间:2024-01-08 11:03:53浏览次数:40  
标签:int C++ buffer 详解 var main ptr 指针

C++指针详解_空指针

定义:

指针是一个整数,一种存储内存地址的数字

  1. 内存就像一条线性的线,在这条街上的每一个房子都有一个号码和地址
  2. 类似比喻成电脑,这条街上每一个房子的地址 是一个字节
  3. 我们需要能够准确找到这些地址的方法,用来读写操作

因此,指针就是这些地址。不要考虑类型,无论是什么类型的指针,都是用来保存地址的整数。

使用

int main() {
    void* ptr = nullptr;
}

表示不在乎类型的空指针,我们无法对空指针进行读取和写入

int main() {
    int var = 8;
    void* ptr = &var;
}

用&符号取得var的地址,并赋给ptr

对程序进行Debug,可以得到var的值为8ptr的的值是0xfd183ffcc4,本文使用的clion,在memory中输入,可以被带到内存区域。

C++指针详解_指针的指针_02

总结来说,它本身不保存所谓变量的数字,指针就是一个保存地址的数,仅此而已

解引用

在指针前增加*可以进行解引用。

int main() {
    int var = 8;
    void* ptr = &var;
    *ptr = 10;
}

上述代码有错误,因为将10赋值给*ptr后,内存不知道该分配多少字节,是4?还是8?……
这时候就需要类型了,用来告诉编译器,他需要多少字节

int main() {
    int var = 8;
    int* ptr = &var;
    *ptr = 10;
    std::cout << var << std::endl; // 结果为10
}

C++指针详解_空指针_03


可以看到编程0a,0a是十六进制的10

堆上创建

int main() {
    char* buffer = new char[8];
    //对指针进行操作

    delete[] buffer;
}
  1. 我们知道char是1byte,上面这句话是告诉编译器,给我分配8个字节的内存,
  2. 与此同时,返回了一个叫buffer的指针指向那块内存的开始位置
  3. 在最后,我们需要使用delete[] buffer来删除指针。

指针的指针

int main() {
    char* buffer = new char[8];

    char** ptr = &buffer;


    delete[] buffer;
    std::cin.get();
}

简单来说指针的指针,就是定义一个新的指针,用来指向指针的地址。

标签:int,C++,buffer,详解,var,main,ptr,指针
From: https://blog.51cto.com/u_13709810/9140202

相关文章

  • Unity3D UGUI的Button组件的介绍及使用详解
    Unity3D是一款功能强大的游戏开发引擎,而UGUI是Unity3D提供的一套用户界面系统。在UGUI中,Button组件是最常用的组件之一,本文将详细介绍Button组件的使用方法和相关技术细节。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大......
  • 详解Java中的原子操作
    第1章:什么是原子操作大家好,我是小黑,面试中一个经常被提起的话题就是“原子操作”。那么,到底什么是原子操作呢?在编程里,当咱们谈论“原子操作”时,其实是指那些在执行过程中不会被线程调度机制打断的操作。这种操作要么完全执行,要么完全不执行,没有中间状态。这就像是化学里的原子,不......
  • CAN总线基础详解以及stm32的CAN控制器
    CAN简介CAN(ControllerAreaNetwork),是IOS国际标准化的串行通信协议。为了满足汽车产业的“减少线束的数量”、“通过多个LAN,进行大量数据的高速通信”的需求。CAN总线的发展史:低速CAN(ISO11519)通信速率10~125Kbps,总线长度可达1000米高速CAN(ISO11898)通信速率125Kbps~1Mbps,总......
  • CentOS7 安装配置SFTP服务器详解
    https://blog.csdn.net/weixin_45688268/article/details/126355365CentOS7安装配置SFTP服务器详解AquaMriusC于2022-08-1521:39:26发布阅读量1w 收藏56点赞数7分类专栏:虚拟机与云服务器文章标签:linuxcentosssh版权华为云开发者联盟该内容已被华为云开发者联盟社区收......
  • 【愚公系列】2024年01月 WPF控件专题 CheckBox控件详解
    ......
  • Java并发集合详解
    第1章:引言大家好,我是小黑,在这篇博客中,咱们将一起深入探索Java中的并发集合。多线程编程是一个不可或缺的部分,它能让程序运行得更快,处理更多的任务。但同时,多线程也带来了一些挑战,尤其是在数据共享和同步方面。为了解决这些挑战,Java提供了一系列的并发集合,这些集合为处理并发数据......
  • C++ Qt开发:Charts与数据库组件联动
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍Charts组件与QSql数据库组件的常用方法及灵活运用。在之前的文章中详细介绍了关于QCharts绘图组件......
  • 刷题笔记——单向链表(C++)
    206.反转链表-力扣(LeetCode)给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。解题思路三指针。temp指针用于存储当前节点的下一节点,pre指针用于存储当前节点反转后指向的新节点。具体操作如下:反转过程:代码实现classSolution{public:ListNode*reverseList(Li......
  • 【愚公系列】2024年01月 WPF控件专题 RadioButton控件详解
    ......
  • PHP中的日期和时间处理函数详解
    在Web开发中,处理日期和时间是一个常见的任务。PHP提供了一系列强大的日期和时间处理函数,例如strtotime、date和DateTimeImmutable::createFromFormat等。这些函数使得在不同的时间格式之间进行转换,进行日期和时间计算以及格式化输出变得更加便捷。本文将深入探讨这三个函数的用......