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

C++中指针的详解及其作用介绍

指针 (pointer) 是一个变量, 其指为另一个变量的地址. 即内存位置的直接地址.

指向对象的指针

在建立对象时, 编译系统会为每一个对象分配一定的存储空间, 以存放其成员.

我们可以定义一个指针变量, 用来存放对象的指针. 例如:

1

2

3

Time time1;

Time *p;// 定义指针, 格式: 类名 *对象指针名

p = &time1;// 将指针指向Time类对象

我们可以通过对象指针访问对象和对象的成员. 例如:

1

2

3

4

5

6

7

8

9

10

11

intmain() {

Time time1;

Time *p;// 定义指针, 格式: 类名 *对象指针名

p = &time1;// 将指针指向Time类对象

p->hour;// 等同于time1.hour

p->show_time();// 等同于time1.show_time()

return0;

}

指向对象数据成员的指针

对象中的成员也有地址, 存放对象成员地址的指针变量就是指向对象成员的指针变量.

定义指向对象数据成员的指针变量的方法和定义指向不同变量的指针变量方法相同. 例如:

1

2

3

4

5

6

7

8

9

intmain() {

Time time1;

int*p;// 定义指针, 格式: 类名 *对象指针名

p = &time1.hour;// 将指针指向time1对象的hour成员

return0;

}

通过指向对象数据成员的指针变量访问成员. 例如:

1

2

3

4

5

6

7

8

9

10

intmain() {

Time time1;

int*p;// 定义指针, 格式: 类名 *对象指针名

p = &time1.hour;// 将指针指向time1对象的hour成员

cout << *p << endl;// *p等同于time1.hour

return0;

}

this 指针

每个对象都可以利用一个自己的特殊指针 this, 即指向当前对象的指针.

Box 类:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

#ifndef PROJECT1_BOX_H

#define PROJECT1_BOX_H

classBox {

private:

doubleheight;

doublewidth;

doublelength;

public:

Box();

Box(doubleh,doublew,doublel);

doublevolume();

};

#endif //PROJECT1_BOX_H

Box.cpp:

1

2

3

4

5

6

7

8

9

#include "Box.h"

Box::Box() : height(-1), width(-1), length(-1) {}

Box::Box(doubleh,doublew,doublel) : height(h), width(w), length(l) {}

doubleBox::volume(){

return(height * width * length);

}

mian:

1

2

3

4

5

6

7

8

9

10

11

12

13

#include "Box.h"

#include <iostream>

usingnamespacestd;

intmain() {

Box a(2,2,2);

doublevolume = a.volume();

cout <<"Box 体积: "<< volume << endl;

return0;

}

this 指针的作用

调用 a.volume(), this 值为对象 a 起始地址, 实际执行:

1

2

3

return((*this).height * (*this).width * (*this).length);

return(this-> height) * (this-> width) * (this- >length)

return(a.height) * (a.width) * (a.length)

this 指针的实现

C++ 在处理时, 会在成员函数的形参列中增加一个 this 指针. 调用时, 将对象的地址给形参 this 指针, 然后按 this 的指向去引用其他成员.

1

2

3

4

5

程序中的调用:

a.volume();

实际的调用方式是:

a.volume(&a);

到此这篇关于C++中指针的详解及其作用介绍的文章就介绍到这了

http://www.jsqmd.com/news/711275/

相关文章:

  • 从PLC到云平台的最后一道防线:C语言工业网关Modbus安全扩展——5年237次渗透测试验证的7项硬核加固实践
  • BMS软件架构师紧急必读:如何在3天内将遗留C代码库升级至ASIL-B合规水平?附MISRA-C规则裁剪决策树与自动化脚本
  • 测试时工具进化(TTE)算法:动态工具生成与优化技术解析
  • 别只会用豆包AI聊天了!这篇从入门到高阶的教程,帮你把AI用成效率神器!
  • 2026年至今,选择冰箱贴制造商的黄金准则:墨菲标牌工艺品厂综合实力探秘 - 2026年企业推荐榜
  • Golang怎么实现分布式追踪采样_Golang如何设置采样率控制Trace数据的采集比例【技巧】
  • 终极指南:3分钟学会用qmcdump解密QQ音乐加密音频,重获音乐自由 [特殊字符]
  • Docker 25.0+原生WASM支持深度解析(含runc-wasi补丁源码级拆解与安全沙箱加固方案)
  • Docker Sandbox运行AI模型:3步实现GPU资源隔离+5大安全加固策略(附可落地的yaml模板)
  • xFasterTransformer:CPU大模型推理加速引擎原理与部署实践
  • 从零开始:5步掌握暗黑破坏神2存档编辑艺术
  • 别让你的验证码形同虚设:滑块验证码技术实现与最佳实践
  • QuickLookVideo:打破macOS视频预览壁垒的技术重构与生态整合
  • 利用ADI官方HDL仓库加速FPGA系统开发:从IP核到完整参考设计
  • Copilot Next 智能工作流搭建全指南,从基础触发到上下文感知自动化,92%开发者尚未掌握的3个隐藏API
  • 沙箱扩容总超时?用eBPF实时追踪MCP 2026调度链路:12个关键耗时节点精确定位
  • 国产AI下载量破100亿次:全球41%开源大模型来自中国,这意味着什么?
  • R基础(三):数据类型(数值、字符、逻辑)
  • 为什么顶尖团队已弃用Flask微服务?Python 3.15 WASM轻量化部署正在重构边缘AI架构(内部技术备忘录泄露版)
  • PostgreSQL LIMIT 指令详解
  • 2025届必备的五大AI学术助手解析与推荐
  • Windows 10安卓子系统完整指南:三步实现安卓应用在Windows 10上运行
  • Windows系统清理终极指南:免费开源工具快速解决电脑卡顿问题
  • nli-MiniLM2-L6-H768快速入门:Windows系统下模型部署与调用
  • 2026年四川别墅防水服务机构排行及实测对比:成都防水补漏,防水检测补漏,飘窗防水检测补漏,优选推荐! - 优质品牌商家
  • C语言Modbus安全扩展开发避坑清单(11个GCC编译器未捕获的时序漏洞,某能源集团已发生3起停机事故)
  • AutoUnipus终极指南:基于Playwright的U校园自动化学习解决方案
  • Python 3 JSON:深入浅出地探索JSON在Python中的应用
  • 欧盟AI法案合规指南:软件测试视角下的五大雷区与应对策略
  • 3步解锁小爱音箱隐藏潜能:从智能助手到开源多媒体中心