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

这篇具有很好参考价值的文章主要介绍了C++ 引用和指针:内存地址、创建方法及应用解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C++ 引用和指针

创建引用

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

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

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

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

C++ 内存地址

内存地址

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

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

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

string food = "Pizza";

cout << &food; // 输出 0x6dfed4

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

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

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

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

C++ 指针

创建指针

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

string food = "Pizza"; // 类型为 string 的食物变量

cout << food;  // 输出 food 的值(Pizza)
cout << &food; // 输出 food 的内存地址(0x6dfed4)

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

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

string food = "Pizza"; // 类型为 string 的食物变量
string* ptr = &food;   // 指针变量,名为 ptr,存储 food 的地址

// 输出 food 的值(Pizza)
cout << food << "\n";

// 输出 food 的内存地址(0x6dfed4)
cout << &food << "\n";

// 使用指针输出 food 的内存地址(0x6dfed4)
cout << ptr << "\n";

示例解释

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

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

string* mystring; // 首选
string *mystring;
string * mystring;

引用和指针的区别

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

什么时候使用引用和指针

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

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

最后

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

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

看完如果觉得有帮助,欢迎点赞、收藏、关注文章来源地址https://www.toymoban.com/news/detail-848128.html

到了这里,关于C++ 引用和指针:内存地址、创建方法及应用解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【C语言】-- 一篇带你了解指针,内存,解引用

    目录 1、什么是指针? 1.1 内存 1.2 指针变量 二、指针和指针类型 1、指针类型 2、指针+整数 3、指针的解引用 三、野指针 1、野指针成因 (1) 指针未初始化 (2) 指针越界访问 (3) 指针指向的空间释放 2、如何规避野指针 四、指针运算 1、指针-指针        本篇文章我们来了解C语

    2024年02月16日
    浏览(56)
  • 【C++】C++ 引用详解 ⑦ ( 指针的引用 )

    指针的引用 效果 等同于 二级指针 , 因此这里先介绍 二级指针 ; 使用 二级指针 作为参数 , 可以实现如下功能 : 动态内存管理 : 借助二级指针 , 可以在函数中分配或释放内存 ; 如 : 创建一个动态数组或调整现有数组的大小 , 在函数中需要一个指向指针的指针作为参数 , 以便修

    2024年02月11日
    浏览(37)
  • C++【4】指针与引用;数组指针;指针数组

    /*     指针变量作为函数参数         函数的参数可以是指针类型,它的作用是将一个变量的地址传送到另一个函数中。         指针变量作为函数参数与变量本身作为函数参数不同,变量作函数参数传递的是具体值。         而指针作为函数参数传递的是内存的地址

    2024年02月07日
    浏览(35)
  • c++的引用和指针

    我们要清楚的知道,使用指针和引用都可以的传入函数的main函数的变量在局部函数改变值时,main函数里面相应的变量也会改变值。但他俩的方式不同。 我们先来说指针,指针传入局部参数时,他会在创建个局部指针变量,然后把传入的地址赋值给局部的指针变量,然后修改

    2024年02月09日
    浏览(49)
  • C++的指针和引用

    C++中内存单元内容和地址 内存由很多的内存单元组成,这些内存单元用于存放各种类型数据; 计算机对内存的每个内存单元都进行了编号,这个编号就称为内存地址,地址决定了内存单元在内存中的位置; 记住这些内存单元地址不方便,因此C++语言的编译器让我们通过名字

    2024年02月06日
    浏览(46)
  • 【C++】引用与指针

    专栏放在【 C++知识总结 】,会持续更新,期待支持 🌹 引用的概念 在C++中,引用的本质其实就是给一个已经存在的变量 ”起别名“ 。也就是说, 引用与它所引用的对象共用一块空间 。( 同一块空间的多个名字 ) 就比如说,李逵又叫黑旋风,而黑旋风就是指李逵本人,只

    2024年02月02日
    浏览(43)
  • C++拾遗(四)引用与指针

    引用和指针是两种不同的概念,尽管它们在某些方面有一些相似之处,但它们在功能和用途上是有所区别 引用:引用是别名,是对已存在变量的另一个称呼,一旦一个变量被引用,就不能再被引用其他变 量。 int a = 10; int ref = a;   这里, ref  是  a  的引用,它们引用的是同

    2024年01月25日
    浏览(57)
  • C++[第五章]--指针和引用

    引用就是别名,引用定义时必须初始化: int a; int b=a; //b即为a的别名 如果不是形参,必须初始化,引用某一变量 指针和c一样; this指针 在类的成员函数中使用,表示当前对象; C++11 新增了一种引用 类型 引用名 = 右值表达式; 引入右值引用如: 编译器允许我们为 num 左值建立

    2024年02月15日
    浏览(40)
  • 【C++初阶(三)】引用详解(对比指针)

    💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C++初阶之路⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习排序知识   🔝🔝 C语言中有一利器: 指针 而C++中增加了另一利器: 引用 这两个板块的存在 极大了提升了C/C++的可用性! 本篇文章将给大家详细讲解引用 并

    2024年02月12日
    浏览(48)
  • C++中const,指针和引用

    在线C/C++编译器,可以试着运行代码。 在C语言中,const修饰的量称为 常变量 (在编译过程中,const就是当成变量的编译生成指令的),不可以直接修改它的值,但是可以 通过地址进行修改其对应的值 。并且const修饰的变量可以不进行初始化,编译器最后默认赋值为0。 然而在

    2024年02月13日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包