C++ 引用和指针:内存地址、创建方法及应用解析

C++ 引用和指针

创建引用

引用变量是对现有变量的“别名”,它是使用 & 运算符创建的:

1string food = "Pizza"; // 食物变量 2string &meal = food; // 对 food 的引用

现在,我们可以使用变量名 food 或引用名 meal 来引用食物变量:

1cout << food << "\n"; // 输出 Pizza 2cout << meal << "\n"; // 输出 Pizza

C++ 内存地址

内存地址

在前一页的示例中,使用 & 运算符创建了一个引用变量。但它也可以用于获取变量的内存地址;即变量在计算机上存储的位置。

当在 C++ 中创建一个变量时,会为该变量分配一个内存地址。当我们给变量赋值时,它将存储在这个内存地址中。

要访问它,使用 & 运算符,结果将表示变量存储的位置:

1string food = "Pizza"; 2 3cout << &food; // 输出 0x6dfed4

注意:内存地址以十六进制形式表示(0x..)。注意你可能在你的程序中得不到相同的结果。

为什么知道内存地址很有用呢?

引用和指针在 C++ 中非常重要,因为它们使你能够操作计算机内存中的数据 - 这可以减少代码并提高性能。

这两个特性是使 C++ 与其他编程语言(如 Python 和 Java)不同的因素之一。

C++ 指针

创建指针

可以使用 & 运算符获取变量的内存地址:

1string food = "Pizza"; // 类型为 string 的食物变量 2 3cout << food; // 输出 food 的值(Pizza) 4cout << &food; // 输出 food 的内存地址(0x6dfed4)

然而,指针是一种将内存地址作为其值的变量。

指针变量指向相同类型的数据类型(如 intstring),并使用 * 运算符创建。将正在处理的变量的地址分配给指针:

1string food = "Pizza"; // 类型为 string 的食物变量 2string* ptr = &food; // 指针变量,名为 ptr,存储 food 的地址 3 4// 输出 food 的值(Pizza) 5cout << food << "\n"; 6 7// 输出 food 的内存地址(0x6dfed4) 8cout << &food << "\n"; 9 10// 使用指针输出 food 的内存地址(0x6dfed4) 11cout << ptr << "\n";

示例解释

  • 使用星号 *string* ptr)创建一个名为 ptr 的指针变量,它指向一个字符串变量。注意指针的类型必须与你正在处理的变量的类型匹配。
  • 使用 & 运算符存储名为 food 的变量的内存地址,并将其分配给指针。
  • 现在,ptr 持有 food 的内存地址的值。

提示:声明指针变量有三种方式,但第一种方式是首选的:

1string* mystring; // 首选 2string *mystring; 3string * mystring;

引用和指针的区别

特性引用指针
初始化必须初始化可以不初始化
可空不允许空引用允许空指针
可变性一旦初始化就不能改变引用指向的变量可以改变指针指向的变量
解引用不需要解引用需要解引用
效率通常比指针更有效率通常比引用效率低

什么时候使用引用和指针

  • 使用引用:
    • 函数参数传递:引用可以传递给函数,函数可以直接修改引用指向的变量,而无需创建副本。
    • 提高效率:引用比指针更有效率,因为不需要指针的解引用操作。
  • 使用指针:
    • 动态内存分配:指针用于动态分配和释放内存。
    • 复杂数据结构:指针用于访问和操作复杂数据结构,例如链表和树。

总而言之,引用和指针都是 C++ 中强大的工具,可以用于高效地操作内存和数据。选择使用引用还是指针取决于具体情况。

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎点赞、收藏、关注

点赞
收藏

评论区

加载中...

相关推荐

c++中引用面试点7连问以及引用真的不分配内存吗

本篇文章从面试官的口吻连问7个引用有关的问题,并且从汇编的层面上对引用进行深入分析,让你充分理解引用的概念和原理。首先还是看一下思维导图:1.引用的背景和概念说到引用,首先要说一下'&'标识符,其实c语言中这个符号只是用来取地址的,并没有引用的概念,直到c对这个标识符的作用进行了扩充,才有了引用这个概念。所谓引用,其实就是给变量取了一个别名,一个简单

java学习笔记3

1 创建引用类型变量公式    数据类型 变量名new数据类型();    变量名.方法名();2 Scanner类的使用!(https://oscimg.oschina.net/oscnet/f0aaacf3774ded91479f8e42c680794aa8c.jpg)!(https://oscimg.oschi

[Dart]Dart语言之旅<二>:变量

变量以下是创建变量并为其分配值的示例:varname'Bob';变量是引用。名为name的变量包含对值为“Bob”的String类型的对象的引用。默认值未初始化的变量的初始值为null。即使是数字类型的变量,初始值也为null,因为数字也是对象。intlineCount;assert(lineCountnull)

Java四种引用类型

引用与对象每种编程语言都有自己操作内存中元素的方式,例如在C和C里是通过指针,而在Java中则是通过“引用”。在Java中一切都被视为了对象,但是我们操作的标识符实际上是对象的一个引用(reference)。//创建一个引用,引用可以独立存在,并不一定需要与一个对象关联Strings;

C++学习_从C到C++

一、引用的概念和应用 1.引用的概念下面写法定义了一个引用,并将其初始化为引用某个变量。类型名&引用名某变量名;intn4;int&rn;//r引用了n,r的类型是int&某个变量的引用,等价于这个变量,相当于该变量的一个别

C++:指针和引用

引用的概念及用法 所谓的引用并不是说重新定义的一个新的变量,而是给一个已经定义好了的变量起的一个别名。 下面看看引用到底是如何使用的:voidtest1(){  inta1;  int&ba;//引用变量b是a的别名  std::cout<<"a:address"<<&a<<std::