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

C++的*了又*

先看下面一段代码

class HeapWord
{
    friend class VMStructs;

private:
    char *i;
};

主函数

#include "HeapWord.hpp"
int main()
{
    HeapWord *heapword = new HeapWord();
    HeapWord *p = new HeapWord();
    HeapWord **p1 = new HeapWord *();
    heapword += 3;

    *(HeapWord **)p = heapword;
    *p1 = heapword;
    return 0;
}

这里首先在堆中创建了一个HeapWord对象的空间,然后其首地址放入heapword

然后又在堆中创建一个HeapWord对象的空间,然后其首地址放入p

然后声明一个变量p1,该对象指向一个指针,该指针指向的是HeapWord类型。

HeapWord **p1 = new HeapWord *();

指针加法

如果执行heapword+=3,其结果是原本的heapword值加上0x18。因为C编译器会自动进行类型计算,将原本的加法转换为具体的字节加法。

用gdb调试如下:
在这里插入图片描述

执行之后
在这里插入图片描述
可见,其结果增加了0x18

在这里插入图片描述

取值

*(HeapWord **)p = heapword;

拆分来看,首先p是一个指针,因此可以强制转为另一种指针,因为指针的本质就是一个64位的整型值。因此(HeapWord**)p表示p是一个指针,这个指针只能指向一个对象,该对象是HeapWord指针。即

p--> HeapWord*()

*(HeapWord**p)就是将HeapWord*()地址内的值取出来放入p所指的地址所在的内存中

在这里插入图片描述

http://www.dtcms.com/a/125562.html

相关文章:

  • vue项目引入tailwindcss
  • 【基于开源insightface的人脸检测,人脸识别初步测试】
  • 本地部署DeepSeek-R1,搭建本地知识库
  • 查看容器内的eth0网卡对应宿主机上的哪块网卡
  • 视频云存储/对象存储EasyCVR视频汇聚平台对接S3存储不能持久化运行的原因排查
  • wkhtmltopdf生成图片的实践教程,包含完整的环境配置、参数解析及多语言调用示例
  • 13、nRF52xx蓝牙学习(GPIOTE组件方式的任务配置)
  • Python asyncio
  • C++ | 多态
  • 要查看 ​​指定 Pod 的资源限制(CPU/内存)
  • 图书管理系统(Python)
  • 蓝桥杯单片机刷题——按键控制距离显示精度
  • Android studio | From Zero To One ——手机弹幕
  • 算法 模版
  • 408 计算机网络 知识点记忆(8)
  • 数据可视化 —— 堆形图应用(大全)
  • 在windows服务器使用Nginx反向代理云端的python实现的web应用
  • 极简cnn-based手写数字识别程序
  • 生成验证码图片
  • shell编程之条件语句
  • 从原始新闻数据中筛选出 正文内容超过 1024 个词(token) 的新闻,并将其保存到新文件中。
  • Linux __命令和权限
  • 两个树莓派如何通过wifi direct传输视频并显示
  • 二分查找4:35. 搜索插入位置
  • AI 笔记 - 开源轻量级人脸检测项目
  • 内联函数通常定义在头文件中的原因详解
  • STL之无序关联式容器针对于自定义类型的操作
  • 使用克魔助手查看iOS 应用程序使用历史记录和耗能历史记录
  • 数字政府网络架构建设方案
  • 创新驱动:智慧养老综合实训室内的前沿技术应用