关于int *a; int &a; int & *a; int * &a

2023-11-06

上述的四条语句,前面两个很好理解,而后面两个,大部分C++初学者都会比较困惑,今天我也是查阅了一些资料以后才恍然大悟。下面具体来说明一下:

int i;

int *a = &i;//这里a是一个指针,它指向变量i

int &b = i;//这里b是一个引用,它是变量i的引用,引用是什么?它的本质是什么?下面会具体讲述

int * &c = a;//这里c是一个引用,它是指针a的引用

int & *d;//这里d是一个指针,它指向引用,但引用不是实体,所以这是错误的


先是第一个问题:引用的本质是什么?

引用就是指针,两者没有区别。我们可以把引用想象成一个不需要"*"就可以访问变量的指针,对比如下程序:

void function(int *a)

{
*a = 100;
}

int main()

{
int x=200;

int *b = &x;

function(b);

return(0);
}


void function(int &a)

{
a = 100;
}

int main()

{
int x = 200;

function(x);

return(0);
}

以上两段程序完成的功能是一样的。

第二个问题:int * &a和int & *a

我在写这两句语句时,在int 和*(&)间空了一格,而后面的&(*)紧跟a。原因是:分析此类语句时,先看a前紧跟的是什么,它决定了a的类型。而int后的一个空格是为了防止int *a, b;//a是指针,而b不是。

其他:int * *a;

它的功能和int * &a一样,两者生成的二进制代码一样。这再一次说明了引用就是指针。

以上如果有什么错误或什么建议,忘高手们指出哈!呵呵



FROM: http://www.cnblogs.com/netqer/archive/2008/10/20/1315386.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于int *a; int &a; int & *a; int * &a 的相关文章

  • 在 Web 浏览器中禁用 F5 [重复]

    这个问题在这里已经有答案了 可能的重复 禁用浏览器的后退按钮 https stackoverflow com questions 961188 disable browsers back button 如何禁用浏览器上的 F5 刷新 htt
  • 通过另一个列表更新列表(linq)

    我有类 Data 的对象列表 如下所示 class Data int code string name DateTime date update 我还有另一个课程列表 例如 class RefCodes int old code int n
  • 以下 PLINQ 代码没有改进

    我没有看到使用以下代码的处理速度有任何改进 IEnumerable
  • 如何调试在发布版本中优化的变量

    我用的是VS2010 我的调试版本工作正常 但我的发布版本不断崩溃 因此 在发布版本模式下 我右键单击该项目 选择 调试 然后选择 启动新实例 此时我看到我声明的一个数组 int ma 4 1 2 8 4 永远不会被初始化 关于可能发生的事
  • 虚拟并行端口模拟器

    在我的计算机网络课程中 我们应该通过使用本机寄存器 例如使用 outportb 等命令 来学习并行端口编程 我没有并行端口 因为我住在 2011 年 但想练习这些程序 我使用 dosbox 安装了旧的 Turboc 3 IDE 有没有一个程
  • Nhibernate:连接表并从其他表获取单列

    我有以下表格 create table Users Id uniqueidentifier primary key InfoId uniqueidentifier not null unique Password nvarchar 255
  • PrivateObject 找不到属性

    我的结构基本上如下所示 abstract class A protected string Identificator get set private void DoSomething DoSomethingSpecific protect
  • C 类型命名约定,_t 或 ALLCAPS

    我一直想知道是否有任何命名约定 例如何时对类型使用全部大写以及何时追加 t 什么时候不使用任何东西 我知道当时 K R 发布了各种有关如何使用 C 的文档 但我找不到任何相关内容 在 C 标准库类型中 t看起来漂亮占主导地位 time t
  • 名称查找、实例化点 (POI) 和基本类型

    以下代码针对 X 进行编译 但不适用于 double struct X void foo double void foo X namespace NN struct A void foo A foo double error foo not
  • 如何设置消息队列的所有者?

    System Messaging MessageQueue 类不提供设置队列所有权的方法 如何以编程方式设置 MSMQ 消息队列的所有者 简短的答案是 p invoke 对 windows api 函数的调用MQSetQueueSecuri
  • 是否可以在Linux上将C转换为asm而不链接libc?

    测试平台为Linux 32位 但也欢迎 Windows 32 位上的某些解决方案 这是一个c代码片段 int a 0 printf d n a 如果我使用 gcc 生成汇编代码 gcc S test c 然后我会得到 movl 0 28 e
  • C 与 C++ 中的 JNI 调用不同?

    所以我有以下使用 Java 本机接口的 C 代码 但是我想将其转换为 C 但不知道如何转换 include
  • WPF DataGrid - 在每行末尾添加按钮

    我想在数据网格的每一行的末尾添加一个按钮 我找到了以下 xaml 但它将按钮添加到开头 有人知道如何在所有数据绑定列之后添加它吗 这会将按钮添加到开头而不是末尾
  • 如何测试某些代码在 C++ 中无法编译? [复制]

    这个问题在这里已经有答案了 可能的重复 单元测试编译时错误 https stackoverflow com questions 605915 unit test compile time error 我想知道是否可以编写一种单元测试来验证给
  • 与 Entity Framework Core 2.0 的一对零关系

    我正在使用 C 和 NET Framework 4 7 将 Entity Framework 6 1 3 Code First 库迁移到 Entity Framework Core 我一直在用 Google 搜索 Entity Framew
  • 在二进制数据文件的标头中放入什么

    我有一个模拟 可以读取我们创建的大型二进制数据文件 10 到 100 GB 出于速度原因 我们使用二进制 这些文件依赖于系统 是从我们运行的每个系统上的文本文件转换而来的 所以我不关心可移植性 当前的文件是 POD 结构的许多实例 使用 f
  • 解释这段代码的工作原理;子进程如何返回值以及在哪里返回值?

    我不明白子进程如何返回该值以及返回给谁 输出为 6 7 问题来源 http www cs utexas edu mwalfish classes s11 cs372h hw sol1 html http www cs utexas edu
  • 对多个对象使用事件处理程序

    我有 20 件物品List
  • Unity,c++ 本机插件字节数组不匹配

    在我的 C 本机插件中 我有一个调用 vector
  • IDisposable 的显式实现

    虽然有很多关于IDisposable在 SO 上找到 我还没有找到答案 我通常遵循这样的做法 当我的一个班级拥有一个IDisposable对象然后它也实现IDisposable并打电话Dispose在拥有的对象上 然而最近我遇到了一个类 它

随机推荐

  • 消息通知系统

    using UnityEngine using System Collections using System Collections Generic public delegate void NotificationDelegate No
  • 华为OD机试真题-单词接龙-2023年OD统一考试(B卷)

    题目描述 单词接龙的规则是 可用于接龙的单词首字母必须要前一个单词的尾字母相同 当存在多个首字母相同的单词时 取长度最长的单词 如果长度也相等 则取字典序最小的单词 已经参与接龙的单词不能重复使用 现给定一组全部由小写字母组成单词数组 并指
  • hive错误:Exception in thread "main" java.lang.RuntimeException: java.io.IOException: Permission denied

    用不同用户去登录hive 可能会报如下错误 Exception in thread main java lang RuntimeException java io IOException Permission denied at org a
  • 嵌入式开发中的通讯协议(UART、SPI、CAN、I2C)

    一 UART UART是一种通用串行数据总线 用于异步通信 该总线双向通信 可以实现全双工传输和接收 1 1接口 两根线 UART TX 发送 UART RX 接收 1 2如何传输 UART作为异步串口通信协议的一种 工作原理是将传输数据的
  • Spring事务传播问题 — PROPAGATION_REQUIRES_NEW

    一 描述Spring遇到嵌套事务时 当被嵌套的事务被定义为 PROPAGATION REQUIRES NEW 时 内层Service的方法被调用时 外层方法的事务被挂起 内层事务相对于外层事务是完全独立的 有独立的隔离性等等 二 实验但实验
  • 区块链中节点和区块的关系&区块链的基本概念

    可以用数学知识来理解 节点是点 区块是线 区块链是面 节点是区块链应用技术里处理信息的基本单位 很多的结点处理完信息后 会被打上时间戳 生成数据区块 把区块按时间先后顺序连接起来就区块链 区块链是一个分布式分类账本 每个区块都是账本中的一页
  • PCB该怎样布局布线,这个小小案例,让你快速了解设计思路!

    在电路设计过程中 应用工程师往往会忽视印刷电路板 PCB 的布局 通常遇到的问题是 电路的原理图是正确的 但并不起作用 或仅以低性能运行 在本文中 我将向您介绍如何正确地布设运算放大器的电路板以确保其功能 性能和稳健性 最近 我与一名实习生
  • 16进制转化为10进制总结

    十六进制转换有16进制每一位上可以是从小到大为0 1 2 3 4 5 6 7 8 9 A B C D E F16个大小不同的数 即逢16进1 其中用A B C D E F 字母不区分大小写 这六个字母来分别表示10 11 12 13 14
  • Android Https相关完全解析 当OkHttp遇到Https

    http blog csdn net lmj623565791 article details 48129405
  • 初始化MySQL时可能遇到的问题

    之前自己第一次初始化数据库时一切顺利 基本过程也已经记录在这里 然而今天换了个环境重新配置数据库的时候 出现了许许多多的问题 趁自己还记得 简单做一下记录 1 Install时出错 在输入指令 mysqld install 时出错 出错内容
  • 如何控制步进电机速度(即,如何计算脉冲频率):

    两相步进电机介绍 实际步进电机控制很简单 应用都是傻瓜了 厂家做好步进电机的驱动器 步进电机如何工作由驱动器来控制 我们不需要对步进电机做深入的了解 只要知道步进电机驱动器的应用方法即可 当然简单的步进电机工作特性 还是必须知道的 下面我会
  • python代码~玫瑰花小练习

    完整代码如下 RoseDraw py import turtle as t 定义一个曲线绘制函数 def DegreeCurve n r d 1 for i in range n t left d t circle r abs d 初始位置
  • C++中 struct tm 和 time_t 时间和日期的使用方法

    1 概念 在C C 中 对字符串的操作有很多值得注意的问题 同样 C C 对时间的操作也有许多值得大家注意的地方 下面主要介绍在C C 中时间和日期的使用方法 通过学习C C 库 你会发现有很多操作 使用时间的方法 但在这之前你需要了解一些
  • C语言指针学习

    开始好好学习C语言啦 指针是C语言比较难的地方 但是非常重要 所以单独在此记录一下 有执念的人最可怕 一定要好好学习哇 C语言指针学习 1 指针是什么 2 null指针 3 指针的运算 4 数组指针 一维数组指针 二维数组指针 5 指针数组
  • 2023年网络安全比赛--网络安全应急响应中职组(超详细)

    一 竞赛时间 180分钟 共计3小时 二 竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 1 找出被黑客修改的系统别名 并将倒数第二个别名作为Flag值提交 2 找出系统中被植入的后门用户删除掉 并将后门用户的账号作为Flag值提交
  • 对1bit的脉冲信号进行展宽,转为32bit位宽,并产生有效信号

    如题 Verilog实现 奉上拙见 对1bit的脉冲信号进行展宽 转为32bit位宽 并产生有效信号 module zhankuan input clk input rst n input pulse in output reg pulse
  • Detected problems with API compatibility(visit g.co/dev/appcompat for more info)

    最近手机升级了Android 9 在写应用程序的时候进场会弹出一个弹框 如下在这里插入图片描述 吓得我一身冷汗 在对应的网站上看了下信息 原来是在android限制调用hide注解的api 注意这种现在并非原来的在sdk中简单去掉hide注
  • 使用LSTM进行文本分类

    说明 之前写过用lstm模型做的文本分类 但是代码结构非常混乱 读过Bert源码后 决定模仿Bert的结构 自己重新写一遍使用lstm模型的代码 只作为熟悉tensorflow各个api与一个比较清楚的NLP模型结构的练手用 不求更高的准确
  • L1-046 整除光棍

    这里所谓的 光棍 并不是指单身汪啦 说的是全部由1组成的数字 比如1 11 111 1111等 传说任何一个光棍都能被一个不以5结尾的奇数整除 比如 111111就可以被13整除 现在 你的程序要读入一个整数x 这个整数一定是奇数并且不以5
  • 关于int *a; int &a; int & *a; int * &a

    上述的四条语句 前面两个很好理解 而后面两个 大部分C 初学者都会比较困惑 今天我也是查阅了一些资料以后才恍然大悟 下面具体来说明一下 int i int a i 这里a是一个指针 它指向变量i int b i 这里b是一个引用 它是变量i