C++程序设计基础【五】(引用和指针)

这篇具有很好参考价值的文章主要介绍了C++程序设计基础【五】(引用和指针)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、引用

引用是对象的替代名称,以简化实体之间的通信。当声明一个引用变量时,不会在内存中创建一个新的对象,而只是声明一个现有变量的替代名称

int& rScore = score;//声明类型为int&的引用变量B,并将其绑定到A上

引用变量在原始变量前加上r并将首字母大写,形成约定,方便查看绑定的对象

1.规范

1.复合类型

引用类型是复合类型,但不能用double&的引用变量来引用int类型的变量

2.永久绑定

引用关系一旦建立后,就不能被更改

3.多重性

可以将多个引用变量绑定到同一个变量,不能将一个引用变量绑定到多个变量

4.不能绑定到值

2.检索值

3.修改值

可以通过原始变量或者任何引用变量修改该值,除非使用const修饰符

4.引用的应用

两个变量使用相同的内存位置,当两个变量处于不同的作用域时使用引用

1.按引用传递

主调函数需要将一个(或多个)对象传递给被调用函数进行处理
按值传递有两个问题,一是形参改变不影响实参,一是复制成本高
(1)如果需要防止更改操作,则应该:(a)对于小对象,使用按值传递;(b)对于大对象,使用按常量引用或按常量指针传递。
(2)如果需要进行更改操作,则应该使用按引用传递或者按指针传递
不能把引用的形式参数绑定到实际参数值

2.按引用返回

被调用函数具有必须返回到主调函数的对象
按值返回存在复制成本高的问题
按引用返回的对象不能是值参数或者局部变量(静态变量除外)

二、指针

指针类型是表示内存位置地址的复合类型,其字面量值是地址,指针变量是其内容为指针类型的变量

1.地址

变量的地址是该变量所占用的第一个字节的地址

2.指针类型和指针变量

为了创建指向某个类型的指针,我们将星号(*)添加到类型名称后面

1.指针变量

存储在指针变量中的是一个4字节的地址

1.声明
bool* pFlag;

从右向左读取声明(pFlag是一个指针,指向bool类型)

2.初始化

指针变量必须用内存中的有效地址初始化

bool* pFlag = &flag;
3.间接引用(解引用)

在主调函数中使用直接方法,在相应的被调用函数中使用间接方法

*pFlag;
4.两个相关的运算符

地址运算符&用于取地址,接收一个变量并返回其地址
间接运算符*用于间接访问,接收一个地址并返回相应的被指变量的值

3.使用const修饰值更改指针

如果指针关系为常量,则无法中断其关系并使指针指向另一个数据变量,此时const修饰符必须放在指针变量的名称前面

4.指向指针的指针

指向指针的指针用双星号(**)

5.两种特殊的指针

1.不指向任何对象的指针(null指针)

不指向任何内存位置的指针,绑定到字面量0,在绑定到有效地址之前无法使用

int* p1 = 0;
double* p2 = 0;

2.指向void的指针(void指针)

void指针是一个通用指针,可以指向任何类型的对象,但在转换为适当的类型前无法引用

6.指针的应用

1.按指针传递

按指针传递的复制成本是固定的4字节地址成本
与按引用传递不同,没有共享形参和实参

2.按指针返回

被调用函数具有必须返回到主调函数的对象

三、数组与指针

1.一维数组

数组的名称是指向第一个元素的常量指针
当使用指针引用数组元素时,需要使用括号来优先计算加法运算符

1.指针的算术运算

指针可进行有限的算术运算
指针减指针得到一个整数
两个指针不能相加

2,带数组参数的函数

形参可用int* p代替array[]传递

2.二维数组和指针

C++中的二维数组是数组的数组
用int(*)[列数]代替数组传递

四、内存管理

C++程序运行时,会使用内存位置

1.代码内存

代码内存存储程序代码,当程序终止时释放其占用的内存

2.静态内存

静态内存用于保存全局对象和静态对象,当程序终止时释放其占用的内存

3.栈内存

栈内存是程序用来保存函数的局部对象或者参数对象的内存部分
在栈内存中创建的对象在编译期间必须具有名称和大小

4.堆内存

在堆内存中创建的对象不能有名称,只能通过其地址访问它,该地址由栈内存中的指针访问

1.new和delete

1.分配对象:new type
2.分配数组:new type [size]
3.释放对象:delete ptr
4.释放数组:delete [] ptr

2.有关堆内存的问题

1.释放没有分配的内存

没有new就不能delete

2.分配了内存但没有释放(内存泄漏)

new了但没有delete

3.悬空指针

delete后再使用时会报错

5.二维数组

1.仅使用栈内存

编译前数组的行列均已知

2.同时使用栈内存和堆内存

编译前数组的行已知,列未知

3.仅使用堆内存

编译前数组的行列均未知文章来源地址https://www.toymoban.com/news/detail-470713.html

到了这里,关于C++程序设计基础【五】(引用和指针)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++语言程序设计之类和对象进阶(3)

            这一部分介绍C++友元函数、友元类和this指针。         友元函数,可以在类的成员函数外部直接访问对象的私有成员。 1.1.1 设计代码 1.1.2 执行结果 图1 友元函数代码执行结果

    2024年01月25日
    浏览(46)
  • C++面向对象程序设计 - 运算符重载

            函数重载就是对一个已有的函数赋予新的含义,使之实现新的功能。因此一个函数名就可以用来代表不同功能的函数,也就是一名多用。运算符也可以重载,即运算符重载(operator overloading)。         运算符重载的方法是定义一个重载运算符的函数,在需要执行被

    2024年04月25日
    浏览(47)
  • Python-基础篇-类与对象/面向对象程序设计

    “类”是物以类聚的 “类” 类 和 对象 是 面向对象编程的 两个 核心概念 类 是对一群具有 相同 特征 或者 行为 的事物的一个统称,是抽象的, 不能直接使用 特征 被称为 属性 行为 被称为 方法 类 就相当于制造飞机时的 图纸 ,是一个 模板 ,是 负责创建对象的 定义类📚

    2024年01月19日
    浏览(53)
  • 【C++ 程序设计】第 3 章:类和对象进阶

    目录 一、构造函数 (1)构造函数的作用 (2)构造函数的定义 ① 定义  ② 声明格式  ③ 在类体外定义构造函数的 3 种形式 (3)构造函数的使用 (4)复制构造函数与类型转换构造函数 ① 定义  ② 格式  ③  自动调用复制构造函数的 3 种情况 二、析构函数 (1)概念

    2024年02月08日
    浏览(53)
  • Java面向对象程序设计实验报告(实验二 面向对象基础练习)

     ✨ 作者: 命运之光  ✨  专栏:Java面向对象程序设计实验报告 目录 ✨一、需求设计 ✨二、概要设计 ✨三、详细设计 ✨四、调试结果 ✨五、测试结果 ✨附录:源程序代码(带注释) 测试类demo2 Address类 Employee类 实验二 面向对象基础练习 实验环境: Eclipse+JDK 实验目的:

    2024年02月06日
    浏览(75)
  • C++面向对象程序设计-北京大学-郭炜【课程笔记(四)】

    开始课程:P11 1_1. this指针 课程链接:程序设计与算法(三)C++面向对象程序设计 北京大学 郭炜 课程PPT:github提供的对应课程PPT C++是没有自身编译器的,需要使用C语言的编译器,所以C++在编译时需要把语言转换为对应的C语言。 实例1: C++程序到C程序的翻译:(下图好理解,

    2024年02月22日
    浏览(54)
  • C++面向对象程序设计-北京大学-郭炜【课程笔记(三)】

    开始课程:P7 2_2. 构造函数 课程链接:程序设计与算法(三)C++面向对象程序设计 北京大学 郭炜 课程PPT:github提供的对应课程PPT 1、成员函数的一种 名字与类名相同,可以有参数,不能有返回值(void 也不行) 作用是对对象进行初始化,如给成员变量赋初值 如果定义类时没

    2024年02月19日
    浏览(47)
  • [ XJTUSE ]JAVA语言基础知识——第一章 面向对象程序设计思想

    类描述了一组有相同 特性 (属性)和相同 行为 (方法)的对象,类和对象是面向对象思想的两个核心概念 · 人类是一种类,每一个具体的人则是这个类的对象 用面向对象程序来模拟真实世界 发现并创建类 发现类的特征 发现类的行为 在面向对象程序中,对象的特征由各种

    2023年04月13日
    浏览(93)
  • C++程序设计基础【三】(类之间的关系)

    在C++中,最一般的类被称为基类,而更具体地类被称为派生类,更一般的类也称为超类,更具体的类也称为子类 派生类继承了基类中的所有成员(有些例外),它还可以添加新成员 最常用的继承是公共继承 基类中的公共成员称为派生类中的公共成员 要对基类和派生类中的函数

    2024年02月07日
    浏览(61)
  • 【C++ 程序设计入门基础】- 第4节-函数

    函数是对实现某一功能的代码的模块化封装。  函数的定义: 标准函数: 输入 n 对整数的 a、b ,输出它们的和。 运行结果如下:  无返回值: 输入n,输出1~n之间所有整数。 运行结果:  无参数: 输入n,如果n为10的倍数,输出3个“very good!”。  运行结果如下:  传值参

    2024年01月17日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包