指针(*)、取地址()、解引用(*)与引用()

指针(*)、取地址(&)、解引用(*)与引用(&)

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

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

指针与取地址

例程:

int main() {int num = 3;int* p = #			// 将变量num的地址取出来,存到指针p中printf("%d 的地址是 %p\n", num, p);return 0;
}

输出

3 的地址是 0x7ffeefbff3ac

上面int* p定义了一个指针p,这个指针指向的地址所存放的变量的数据类型是int,在本例程中,即是指向int型变量num,而p的值即是变量num的地址。

而&num中的&是取地址操作符,当&作用于一个对象上时,它返回了该对象的地址,比如例程中的&num即是为变量num的地址。

解引用与指针赋值

例程

int main(){int num = 7;  int* p = #  printf("数值%d所在的地址是 %p\n", num, p);  printf("指针p所指向的地址为 %p , 该地址上所保存的值为%d\n", p, *p);  *p = 100;  printf("指针p所指向的地址为 %p , 该地址上所保存的值为%d\n", p, num);  return 0;  
}

输出:

数值7所在的地址是 0x7ffeefbff3b8
指针p所指向的地址为 0x7ffeefbff3b8 , 该地址上所保存的值为7
指针p所指向的地址为 0x7ffeefbff3b8 , 该地址上所保存的值为100

注意这里*操作符为解引用操作符,它返回指针p所指的对象的值(注意不是地址)。

我们可以对*p赋值(对左值赋值),从而改变p所指的地址上所保存的值,从而改变此地址所存储的变量num的值。(上面num的值变为100)

当然,我们也可以给指针p赋值,使其指向另外一个地址(这样就改变了在解引用时获取的左值):

int main(void)  
{  int num = 7, another = -5;  int *p = #  p = &another;  printf("%d\n", *p);//此时p指向了another,所以输出了another的值,即-5  return 0;  
}  

输出

-5

引用

最通俗的解释:引用就是起别名

引用在C中没有,在C++中才有。

  
int main()  
{  int val = 7, val2 = 999;  int &refval = val, &refval2 = val2; //引用必须要初始化,使其绑定到一个变量上  //修改引用的值将改变其所绑定的变量的值  refval = -12;  printf("%d %d\n", val, refval);//-12,refval的值和val一样  //将引用b赋值给引用a将改变引用a所绑定的变量的值,  //引用一但初始化(绑定),将始终绑定到同一个特定对象上,无法绑定到另一个对象上  refval = refval2;  printf("%d %d\n", val, refval);//999  return 0;  
}  

输出

-12 -12
999 999

总结

*操作符:

  1. 定义一个指针

    int* p;
    
  2. 将一个指针(地址)解引用得到改地址所存的值

    cout << *p << endl;
    

&操作符

  1. 取地址,将某个变量在内存中所存放的地址拿到

    cout << &num << endl;
    
  2. 引用,进行引用,可以理解为给变量起别名,作用在引用上的所有操作事实上都是作用在该引用所绑定的对象上。

    int val = 7;
    int &refval = val;
    

Ref:

https://www.runoob.com/cplusplus/cpp-pointer-operators.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532850.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab电类,985电气研二,有发过考研经验贴 电气电力类的有

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼clc;clear;p[2.259;2.257;2.256;2.254;2.252;2.248;2.247;2.245;2.244;2.243;2.239;2.238;2.236;2.235;2.234;2.231;2.229;2.228;2.226;2.225;2.221;2.220;2.219;2.217;2.216;2.211;2.209;2.208;2.207;2.206;2.202;2.201;2.199;2.1…

matlab legend 分块,matlab legend 分块!

matlab legend 分块&#xff01;(2013-03-26 18:07:38)%%%压差clc;clear all;figure(55);set (gcf,Position,[116 123 275 210],color,w);P[25 26 27 28 29 30 31 32 33 34 35];%理论q0.00006*pi*28*P*10^(6)*0.03^3/(12*0.028448*5);q1110.00006*pi*28*P*10^(6)*0.03^3/(12*0.…

利用opencv-python绘制多边形框或(半透明)区域填充(可用于分割任务mask可视化)

利用opencv-python绘制多边形框或&#xff08;半透明&#xff09;区域填充&#xff08;可用于分割任务mask可视化&#xff09; 本文主要就少opencv中两个函数polylines和fillPoly分别用于绘制多边形框或区域填充&#xff0c;并会会以常见用途分割任务mask&#xff08;还是笔者…

matlab与maple互联,Matlab,Maple和Mathematica三款主流科学计算软件的互操作

本文根据网上零散的信息以及这三款软件自带的说明文档整理而成&#xff0c;为备忘而记录。记录了Matlab和Maple之间的相互调用&#xff0c;以及Matlab和Mathematica之间相互调用的安装配置方法。为何需要互操作&#xff1f; 数值计算和图形方面Matlab毫无疑问是最强的&a…

PyTorch中的topk方法以及分类Top-K准确率的实现

PyTorch中的topk方法以及分类Top-K准确率的实现 Top-K 准确率 在分类任务中的类别数很多时&#xff08;如ImageNet中1000类&#xff09;&#xff0c;通常任务是比较困难的&#xff0c;有时模型虽然不能准确地将ground truth作为最高概率预测出来&#xff0c;但通过学习&#…

java高级语言特性,Java高级语言特性之注解

注解的定义Java 注解(Annotation)又称 Java 标注&#xff0c;是 JDK1.5 引入的一种注释机制。注解是元数据的一种形式&#xff0c;提供有关于程序但不属于程序本身的数据。注解对它们注解的代码的操作没有直接影响。注解本身没有任何意义&#xff0c;单独的注解就是一种注释&am…

C/C++中的typedef 和 #define

C/C中的typedef 和 #define typedef C/C中的关键字typedef允许用户为类型名来起一个新名字&#xff0c;通常会是缩写或者能够清晰表明类型含义的新名字。 例&#xff1a; typedef unsigned int UINT; UINT 100;值得注意的是&#xff0c;typedef除了为C/C内置的数据类型取别…

php3.2.3 升级,thinkphp3.2.3 升级到3.2.4时出错问题

有些项目最初用OneThink做的&#xff0c;而OneThink 默认使用的TP 是3.2.0 的&#xff0c;没事的时候就想给升级一下&#xff0c;但是直接复制进去的时候&#xff0c;有错误&#xff0c;导致OneThink 不能运行&#xff0c;排查后&#xff0c;需要修改两个地方1、修改 Applicati…

Positional Encodings in ViTs 近期各视觉Transformer中的位置编码方法总结及代码解析 1

Positional Encodings in ViTs 近期各视觉Transformer中的位置编码方法总结及代码解析 最近CV领域的Vision Transformer将在NLP领域的Transormer结果借鉴过来&#xff0c;屠杀了各大CV榜单。对其做各种改进的顶会论文也是层出不穷&#xff0c;本文将聚焦于各种最新的视觉trans…

mysql 分析查询语句,MySQL教程之SQL语句分析查询优化

怎么获取有功能问题的SQL1、经过用户反应获取存在功能问题的SQL2、经过慢查询日志获取功能问题的SQL3、实时获取存在功能问题的SQL运用慢查询日志获取有功能问题的SQL首要介绍下慢查询相关的参数1、slow_query_log 发动定制记载慢查询日志设置的办法&#xff0c;能够经过MySQL指…

关于PyTorch中的register_forward_hook()函数未能执行其中hook函数的问题

关于PyTorch中的register_forward_hook()函数未能执行其中hook函数的问题 Hook 是 PyTorch 中一个十分有用的特性。利用它&#xff0c;我们可以不必改变网络输入输出的结构&#xff0c;方便地获取、改变网络中间层变量的值和梯度。这个功能被广泛用于可视化神经网络中间层的 f…

geoda权重矩阵导入matlab,空间计量经济学-分析解析.ppt

厦门大学 邓明 空间截面回归模型 地理加权回归模型 地理加权回归模型扩展了普通线性回归模型。在GWR模型中&#xff0c;特定区位的回归系数不再是利用全部信息获得的假定常数&#xff0c;而是利用邻近观测值的子样本数据信息进行局域(Local)回归估计而得&#xff0c;并随着空间…

树莓派摄像头基础配置及测试

树莓派摄像头基础配置 step 1 硬件连接 硬件连接&#xff0c;注意不要接反了&#xff0c;排线蓝色一段朝向网口的方向。&#xff08;笔者的设备是树莓派4B&#xff09; step 2 安装raspi-config 安装 raspi-config raspi-config在raspbian中是预装的&#xff0c;而在kali、…

matlab sobel锐化,sobel锐化 - yirui wu.ppt

sobel锐化 - yirui wu第六章 图像锐化 图像锐化的概念 图像锐化的目的是加强图像中景物的细节边缘和轮廓。 锐化的作用是使灰度反差增强。 因为边缘和轮廓都位于灰度突变的地方。所以锐化算法的实现是基于微分作用。 图像锐化方法 图像的景物细节特征&#xff1b; 一阶微分锐化…

使用百度云智能SDK和树莓派搭建简易的人脸识别系统 Python语言版

硬件 树莓派4B一个CSI摄像头一个 笔者使用的是树莓派4B和CSI摄像头&#xff0c;但是树莓派3和USB摄像头等相似设备均可。 百度云智能设置 Step 1 登录 百度云智能 网址https://cloud.baidu.com/ 首先登录百度账号&#xff0c;与百度云、百度贴吧等互通&#xff0c;可直接…

php 5.6 引用传递,升级到5.6.x后如何在php中修复引用传递

我最近将fom php 5.2升级到5.6,并且有一些代码我无法修复&#xff1a;//Finds users with the same ip- or email-addressfunction find_related_users($user_id) {global $pdo;//print_R($pdo);//Let SQL do the magic!$sth $pdo->prepare(CALL find_related_users(?));$…

RuntimeError: [enforce fail at inline_container.cc:145] . PytorchStreamReader failed reading zip arc

RuntimeError: [enforce fail at inline_container.cc:145] . PytorchStreamReader failed reading zip archive: failed finding central directory 原因分析 这个报错是出现在PyTorch在读入模型参数时&#xff1a; checkpoint torch.load(epoch_15.pth, map_locationcpu)…

xp搭建 php环境,windows xp 下 LAMP环境搭建

1. apache安装步骤如下图在浏览器中输入&#xff1a;localhost&#xff0c;出现下面页面说明已成功安装apache。2. mysql安装如下图显示在运行里面输入cmd &#xff0c;然后连接测试mysql &#xff0c;如图所示&#xff1a;3. php安装(1)将php压缩包解压到安装路径中的php目录…

C++中的虚函数(表)实现机制以及用C语言对其进行的模拟实现

C中的虚函数(表)实现机制以及用C语言对其进行的模拟实现 声明&#xff1a;本文非博主原创&#xff0c;转自https://blog.twofei.com/496/&#xff0c;博主读后受益良多&#xff0c;特地转载&#xff0c;一是希望好文能有更多人看到&#xff0c;二是为了日后自己查阅。 前言 …

php 前端模板 yii,php – Yii2高级模板:添加独立网页

我在backend / views / site下添加了help.php,并在SiteController.php下声明了一个能够识别链接的函数public function behaviors(){return [access > [class > AccessControl::className(),rules > [[actions > [login, error],allow > true,],[actions > […