C++ 指针运算符(& 和 *) | 菜鸟教程

C++ 指针运算符(& 和 *)

正在上传…重新上传取消 C++ 运算符

C++ 提供了两种指针运算符,一种是取地址运算符 &,一种是间接寻址运算符 *。

指针是一个包含了另一个变量地址的变量,您可以把一个包含了另一个变量地址的变量说成是"指向"另一个变量。变量可以是任意的数据类型,包括对象、结构或者指针。

取地址运算符 &

& 是一元运算符,返回操作数的内存地址。例如,如果 var 是一个整型变量,则 &var 是它的地址。该运算符与其他一元运算符具有相同的优先级,在运算时它是从右向左顺序进行的。

您可以把 & 运算符读作"取地址运算符",这意味着,&var 读作"var 的地址"。

间接寻址运算符 *

第二个运算符是间接寻址运算符 *,它是 & 运算符的补充。* 是一元运算符,返回操作数所指定地址的变量的值。

请看下面的实例,理解这两种运算符的用法。

实例

#include <iostream>
 
using namespace std;
 
int main ()
{
   int  var;
   int  *ptr;
   int  val;

var = 3000;

// 获取 var 的地址
   ptr = &var;

// 获取 ptr 的值
   val = *ptr;
   cout << "Value of var :" << var << endl;
   cout << "Value of ptr :" << ptr << endl;
   cout << "Value of val :" << val << endl;

return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

Value of var :3000
Value of ptr :0xbff64494
Value of val :3000

正在上传…重新上传取消 C++ 运算符

C++ 存储类

C++ 循环

2 篇笔记 写笔记

  1. 123

    273***4334@qq.com

    106

    调用时变量前加 "&" -------返回该变量的地址

    声明时变量前加 "基本类型 *" -------该指针变量表示另一个普通变量的地址   eg:int * 或 char *

    调用时变量前加 "*"-------表示取该地址的内容

    声明时变量前加 "基本类型 **"-------该二级指针变量表示另一个一级"基本类型 *"指针变量地址

    123

    123

    273***4334@qq.com

    2年前 (2019-10-12)

  2. hievery1

    hie***y1@126.com

    56

    声明时,变量前加 "基本类型 &" :声明引用变量。它是某个已存在变量的别名,即该引用变量名称与原始变量名称都代表同一个变量。

    声明时,变量前加 "基本类型 *" :声明指针变量。它的值是另一个变量的地址

    声明时,变量前加 "基本类型 **":声明二级指针变量。它的值是另一个一级"基本类型 *"指针变量的地址  (指针的指针)。

    调用时,变量前加 "&" :使用取地址运算符获取该变量的地址

    调用时,指针变量前加 "*" :使用间接寻址运算符获取该指针变量所指向的变量

    调用时,二级指针变量前加 "**" :获取该二级指针变量所指向的指针所指向的变量

    示例:

    #include <iostream>
    using namespace std;
    int main(){int  var;     // 声明int类型变量varint * ptr;    // 声明指针变量ptrptr = &var;   // 先使用 & 运算符获取变量var的地址,再把该地址赋值给指针变量ptrint ** pptr;  // 声明二级指针变量pptrpptr = &ptr;  // 先使用 & 运算符获取变量ptr的地址,再把该地址赋值给二级指针变量pptrint & ref1 = var;   // 声明引用变量ref1, ref1是变量var的别名(引用必须在创建时被初始化)int & ref2 = *ptr;  // 先使用*运算符获取指针变量ptr所指向的变量(即var),再用该变量(var)初始化引用变量ref2(声明引用变量ref2的同时对它进行初始化)。也就是说,该行代码执行后,ref2也是变量var的别名 var = 20cout << "Value of var: "; cout << var << endl; cout << "Value of &var: "; cout << &var << "\t(var的地址)" << endl; cout << endl; cout << "Value of ptr: "; cout << ptr << "\t(等于&var)" << endl; cout << "Value of *ptr: "; cout << *ptr << "\t\t(等于var)" << endl; cout << "Value of &ptr: "; cout << &ptr << "\t(ptr的地址)" << endl; cout << endl; cout << "Value of pptr: "; cout << pptr << "\t(等于&ptr)" << endl; cout << "Value of *pptr: "; cout << *pptr << "\t(等于ptr, 等于&var)" << endl; cout << "Value of **pptr: "; cout << **pptr << "\t\t(等于*ptr, 等于var)" << endl; cout << "Value of &pptr: "; cout << &pptr << "\t(pptr的地址)" << endl; cout << endl; cout << "Value of ref1: "; cout << ref1 << "\t\t(等于var)" << endl; cout << "Value of &ref1: "; cout << &ref1 << "\t(等于&var)" << endl; cout << endl; cout << "Value of ref2: "; cout << ref2 << "\t\t(等于var)" << endl; cout << "Value of &ref2: "; cout << &ref2 << "\t(等于&var)" << endl; return 0;
    }

    输出结果:

    Value of var: 20
    Value of &var: 0x7ffce63490bc    (var的地址)Value of ptr: 0x7ffce63490bc    (等于&var)
    Value of *ptr: 20        (等于var)
    Value of &ptr: 0x7ffce63490b0    (ptr的地址)Value of pptr: 0x7ffce63490b0    (等于&ptr)
    Value of *pptr: 0x7ffce63490bc    (等于ptr, 等于&var)
    Value of **pptr: 20        (等于*ptr, 等于var)
    Value of &pptr: 0x7ffce63490a8    (pptr的地址)Value of ref1: 20        (等于var)
    Value of &ref1: 0x7ffce63490bc    (等于&var)Value of ref2: 20        (等于var)
    Value of &ref2: 0x7ffce63490bc    (等于&var)

C++ 指针运算符( 和 *) 终于讲明白了相关推荐

  1. 到底什么是机器学习模型?这篇文章终于讲明白了

    机器学习 (Machine Learning) 是对研究问题进行模型假设,利用计算机从训练数据中学习得到模型参数,并最终对数据进行预测和分析的一门学科. **模型是机器学习的核心组成要素.**本文从模 ...

  2. 带你学MySQL系列 | 困扰MySQL初学者的分组聚合查询,我终于讲明白了!

    1.分组查询的原理图 对上述原始数据,按照DEPARTMENT_ID(员工id)分组统计SALARY(薪水)的平均值. 上述原理写成代码,应该怎么写呢? select department_id,av ...

  3. 为什么php-fpm会使用内存一直增加_终于讲明白了!国外大神超详细解读:苹果M1为什么比英特尔x86快了那么多?...

    12 月 1 日消息 苹果的 M1 芯片是苹果在 Mac 上搭载的单核 CPU 基准测试成绩最快的芯片,在多核性能方面,也击败了许多高端英特尔竞品.开发者Erik Engheim 近日分享了对 M1 ...

  4. rds基于什么开发_IaaS、PaaS、SaaS、DaaS都是什么?现在怎么样了?终于有人讲明白了...

    导读:本文将详细科普云计算的概念.云服务的发展现状,并逐一介绍各种云服务模式(IaaS.PaaS.SaaS.DaaS),建议收藏! 01 云计算的概念 云是一种服务,可以像使用水.电.煤那样按需使用. ...

  5. 什么是云原生,跟云计算有什么关系?终于有人讲明白了

    导读:云原生到底是什么? 作者:阿里集团 阿里云智能事业群 云原生应用平台 来源:大数据DT(ID:hzdashuju) 云原生(Cloud Native)的概念,最早是由Pivotal于2015年提 ...

  6. Netflix正在搞的混沌工程到底是什么?终于有人讲明白了

    导读:与任何新概念一样,混沌工程时常被误解.本文会探讨混沌工程是什么以及不是什么. 作者:Casey Rosenthal, Nora Jones 来源:大数据DT(ID:hzdashuju) 在Net ...

  7. 终于有人把用户画像的流程、方法讲明白了

    导读:用户标签是个性化推荐.计算广告.金融征信等众多大数据业务应用的基础,它是原始的用户行为数据和大数据应用之间的桥梁,本文会介绍用户标签的构建方法,也就是用户画像技术. 作者:马海平 于俊 吕昕 向 ...

  8. 终于有人把卷积神经网络(CNN)讲明白了

    导读:深度学习作为人工智能的一个分支,在计算机视觉处理方面取得的巨大成就,与深度学习中的算法及方法密切相关,如卷积神经网络.反向传播算法.正则化方法.迁移方法等.其中很多方法具有普遍性,在自然语言处理 ...

  9. 终于有人把大数据架构讲明白了

    导读:如何存储.如何利用大规模的服务器集群处理计算才是大数据技术的核心. 作者:李智慧 来源:大数据DT(ID:hzdashuju) 大数据技术其实是分布式技术在数据处理领域的创新性应用,其本质和此前 ...

最新文章

  1. 使用Truffle时遇到的问题和解决方法
  2. 【安全漏洞】Emissary 的SSRF漏洞(CVE-2021-32639)发现过程
  3. 1万条数据大概占多大空间_「数据分析」Sqlserver的窗口函数的精彩应用之数据差距与数据岛...
  4. 变量之--列表初始化和结构化绑定
  5. eclipse maven scm
  6. python按行读取excel文件_python3读取excel文件只提取某些行某些列的值方法
  7. 用Aliyun E-MapReduce集群的sqoop工具和数据库同步数据如何配置网络
  8. CCF NOI1012 变换密码
  9. JNI java.lang.UnsatisfiedLinkError
  10. 装双系统?不需要 教你在iMac上流畅使用Windows
  11. Matlab 基本画图命令
  12. 手把手教你玩转QQ的原创表情
  13. linux 更新cuda 驱动程序,记:第一次更新服务器CUDA和GPU驱动
  14. 威金杀虫剂作者农夫和威金病毒制造者的聊天记录
  15. 《数据库原理与应用》复习总结
  16. 20172328 2018-2019《Java软件结构与数据结构》第七周学习总结
  17. 1153. 字符串排序
  18. python练手经典100例项目-Python 的练手项目有哪些值得推荐?
  19. ASCII栅格的显示
  20. YOLOX源码解读系列

热门文章

  1. 值类型 与引用的 copy
  2. pythonmysql数据库系统实战_Python实战之MySQL数据库操作
  3. checkbox选中和不选中_我的lt;input /gt;不可能这么可爱
  4. html5控件组合,[Vue 3] 教程 – 可复用与组合 – 插件
  5. mycat mysql 存储过程_MyCat 学习笔记 第十三篇.数据分片 之 通过HINT执行存储过程...
  6. MySQL数据表的优化
  7. 桥接模式(Bridge)
  8. 第02章_MySQL环境搭建
  9. fcm算法c语言实现,基于特征权重的FCM算法研究及应用
  10. 大数据 防范脱贫人口返贫_男性比女性多出3047万,从人口大数据看,房价会涨还是跌?...