当前位置: 首页 > 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.cnnetsun.cn/news/2121625.html

相关文章:

  • 为AI智能体构建安全通讯录:基于MCP协议与Veyra提交模式的实践
  • 为什么你学了那么多新技术,依然感到焦虑?
  • 零基础掌握Instagram数据爬取:免费获取公开数据的完整指南
  • QuickLookVideo:打破macOS视频预览壁垒的技术重构与生态整合
  • AI婚恋匹配算法:从原理到实践
  • Windows风扇控制技术解析:FanControl深度配置与优化指南
  • 大模型无参考评估框架Metric-S的设计与实践
  • 2026实测AI论文写作工具,毕业生必备
  • GHelper:华硕笔记本性能调校的终极免费方案,告别臃肿官方软件
  • 大语言模型认知行为与元推理技术研究
  • 5分钟快速上手:使用ExtractorSharp打造个性化游戏补丁
  • 元宇宙质量保障:Roblox脚本安全测试框架的构建与实践
  • 免费GPT-4 API自建指南:开源代理服务部署与调用实战
  • 医疗级C代码如何扛住10ms级中断风暴?(嵌入式C实时采集内核级调优白皮书·仅限医疗器械开发者内部流通)
  • [Rust][ARM64] 八、加载下一阶段——从 SD 卡读取内核并移交控制权
  • 基于MCP协议构建实时加密货币行情服务器,无缝集成AI工作流
  • UnBuild:AI驱动的逆向工程引擎,自动生成项目重建蓝图与AI编码指令
  • FloPy:Python地下水流建模的终极指南
  • Winhance中文版:三步打造专属Windows系统的终极优化指南
  • Sigil插件系统技术解析:Python驱动的电子书编辑自动化框架
  • 数学推理分层训练系统:从认知拆解到策略优化
  • Docker AI Toolkit 2026新特性深度拆解(含CNCF官方认证路径与NIST AI RMF合规适配对照表)
  • 微信投票系统开发,礼物打赏投票+图片音频视频全支持
  • 如何快速部署TouchGal:一站式Galgame社区平台的完整指南
  • 基于GitHub数据与LightGBM的智能时间规划工具MonkeyPlanner解析
  • AI系统卡:实现AI透明化的关键技术与实践
  • 华为USG6000V防火墙新手避坑指南:从eNSP搭建到成功上网的5个关键点
  • Go语言的sync.RWMutex中的算法公平
  • Java实现AI流式输出(打字机效果):从原理到实战
  • DreamingComics:精准布局控制的故事可视化技术解析