c++基础---之*运算符和&运算符

C++中的指针运算符(& 和 *) 标题 C++ 提供了两种指针运算符,一种是取地址运算符 &,一种是间接寻址运算符 *。 用int类型做例子,首先要区分int*,int&,*,&这四个的区别。 int* 第一个int * 是int类型的指针。什么是指针呢?就是存放地址的类型。我们知道地址一般是一个8位的16进制数,比如012FF80C。虽然看上去是串数字,但是它并不能用整形或浮点型来存放。对于某个类型(比如...... 阅读详情

首先说一下:&运算符的返回结果是个右值,而*运算符的返回结果是个左值(假设p是指向变量a的指针,则*p返回的是变量a而不要老错误的理解返回的是变量a的内容)。

其次,&运算符和*运算符的运算目标必须都是个变量,不能出现*(2048)或&(2048)之类的语句,因为编译不通过。

例子如下:

#include <stdio.h>
int main(int argc, char* argv[])
{
 int a=98;
 int *p=&a;
 //测试*p是个左值(变量)
 printf("测试*p是个左值(变量)\n");
 printf("*p的结果: %d",*p);
 printf("\n");
 printf("*p=5的结果: %d",*p=5);

 //测试&a是个右值(常量)
 printf("\n\n测试&a是个右值(常量)\n");
 printf("&a的结果: %d",&a);
 //printf("%d",&a=(int*)5); //编译出错,提示&a不是个左值

 //测试“脱去解引用”
 printf("\n\n测试“脱去解引用”\n");
 printf("&*p的结果: %d",&*p);
 scanf("%d",a); //暂停
 return 0;
}

输出结果:

 

下面是网上收集的一下知识,有兴趣可以看一下:

(1)*
大家都知道在写int *p 时,*可以声明一个指针。很少人知道*在C/C++中还有一个名字就是“解引用”。他的意思就是解释引用,说的通俗一点就是,直接去寻找指针所指的地址里面的内容,此内容可以是任何数据类型,当然也可以是指针(这就是双重指针,后面将会讨论)。需要注意的是,在变量声明的时候,*不能当做解引用使用,只是表示你声明的变量是一个指针类型。
example1:
int a=50;
int *p=&a;// '&'的作用就是把a变量在内存中的地址给提取出来,具体后面解释。
*p=5;//这就是解引用,*解释了p对常量50的内存地址的引用,解释结果就是直接去寻找p所指内容,因为p指向a,所以a的内容将被修改为5,而不是50。

(2) &
& 在C/C++中具体 3种语义, 按位与,取地址 和 声明一个引用。
int a=0x0000002 & 0x00000003;//按位与
int *p=&a;//取地址,取出a在内存中的地址给p,这样就建立一个指针映射,使得p指a
int &a=b;//声明a是b的引用,对a操作修改也就是直接对b修改。
在指针操作中,&还有一种叫法叫做“脱去解引用”,在这个表达式中&*p(假设p是指针),&脱去了*对a的解引用,从而得到抵消的效果,得到应该是p所指的变量的地址。
example2:
接example1。
println(“%x ||||| %x”,&p,&*p);
输出结果:
p在内存中的地址|||||a在内存中的地址
为什么呢?
首先&去指针p的地址,然后&脱去了p对a中5的引用,解引用和脱去解引用效果抵消,从而得到了p所指的变量的地址,也就是a在内存中的地址。

UE4+C++开发-(七十九)-C++中的&和*的区别详解? C++中&amp;和*运算符的区别与使用指南:&amp;是取地址运算符,用于获取变量地址或声明引用;*是解引用运算符,用于访问指针指向的值或声明指针。引用必须初始化且不能重新绑定,更安全;指针可为空且灵活,支持动态内存管理。实际开发中,优先使用引用保证安全性,仅在需要动态内存、可选参数等场景使用指针。智能指针和const引用是现代C++推荐做法。 阅读详情

相关推荐

C/C++中*和&的用法详解

C++中&amp;和*的用法一直是非常让人头疼的难点,网上讲这些知识点多数都是分开讲其用法的,没有详细的总结,导致我在这方面的知识结构格外混乱,在网上找到了一篇英文文章简单总结了这两个符号的一些用法,不过都是一些比较基础的知识。 C/C++中*和&amp;的用法 C++语言是C语言的超集。几乎所有可以运行的C程序都是可以运行的C++程序。因此,写一个不包含C++特性的C++程序是可能的,尽管cou...

希望我的博客,能帮上你解决学习中工作中所遇到的问题 3011

C++中的左值和右值

⛺️ C++ 中的左值和右值在不同的时期又不同的定义,本节先从最初的左值右值开始判断左值右值的方法有好几种,但是都存在一定的局限性.📦 位于左边的就是一个左值,右边的就是右值可是说变量a就是一个左值, 字面量90就是一个右值.但是这样判断存在一个很大的问题,比如下面变量b和变量c都是左值🔑 可以取到地址的都是左值,否则就是右值因为C++

mxj257的博客 1738

自动驾驶仿真:基于Carsim开发的加速度请求模型

1、自动驾驶行业中,算法端对于纵向控制的功能预留接口基本都是加速度,我们需要给控制器仿真加速度的信号,控制器才会实现对纵向功能的控制。2、Carsim或者其他动力学软件,主要提供者节气门开度和主缸压力进行控制。我们在进行联合仿真时,往往都要通过PID的方式将请求加速度转换成对应的节气门开度与主缸压力传给动力学软件进行闭环控制。

zataji的博客 6915

位运算符详解(与,或,非,异或,<<,>>)

位运算符主要是以二进制规则进行运算 1.与(&amp;)运算符 使用规则:两个二进制操作数对应位同为1 结果位 才为1,其余情况为0; 例如:整数 a = 15   整数 b = 127 15 的二进制位:0000 1111 127 的二进制为:0111 1111 2.或(|)运算符 使用规则:两个二进制操作数对应位只要有一个为1 结果位 就为1,其余情况为0 例如:整数 a = 15   整数 b = 127 ...

mofeigege的博客 1万+

从零搭建VGGNet

在 forward 方法中实现了前向传播过程,包括卷积、激活、池化和平铺操作,最后通过全连接层得到分类结果。使用 torch.onnx.export 将模型导出为 ONNX 格式的文件 vgg.onnx。导出 ONNX:将模型导出为 ONNX 格式,便于在其他平台或框架中使用。定义 VGG 网络:构建了一个包含多个卷积层、池化层和全连接层的网络。使用 torch.save 将整个模型保存为 vgg.pth 文件。前向传播:对输入数据进行前向传播,得到输出结果。保存模型:将模型保存为 .pth 文件。

开源驱动,创造价值;坦诚清晰,快速失败;让复杂可计算。 521

左值和右值

左值:能够出现在赋值符号左边的东西。他表示一个特定的位置,即左值表示一块地址。所以像:++i=10,i++=10, a+10=10....都是错误的。因为赋值号左边的东西不能表示一块地址。arr[10]=10,因为arr[10]通过下标访问一块地址,所以他是正确的。int a,b,*p;p=&amp;a;*p=10; 指针p存储的是a的地址,当使用*p时,表示的是a的位置。...

weixin_34082177的博客 176

保姆级教程:用Docker快速部署mpromonet/webrtc-streamer实现WebRTC直播(附常见问题解决)

本文提供了一份详细的Docker部署mpromonet/webrtc-streamer的实战指南,帮助用户快速搭建WebRTC直播服务。内容涵盖从环境准备、基础部署到进阶配置与性能调优的全过程,并针对容器网络、视频流配置、跨网访问等常见问题提供了解决方案,旨在实现低延迟的流媒体传输。

dell8的博客 177

&运算符和|运算符

这些位运算符在处理二进制数据、进行底层编程、实现特定的数据结构等方面非常有用。它们可以对二进制数据的每一位进行精确控制和操作,提供了更高的灵活性和效率。是位运算符中的按位或操作符。按位或操作符对两个操作数的每一位进行逻辑或运算,如果两个对应位中至少有一个为 1,则结果为 1,否则为 0。是位运算符中的按位与操作符。按位与操作符对两个操作数的每一位进行逻辑与运算,如果两个对应位都为 1,则结果为 1,否则为 0。(按位或)通常用于处理二进制数据或进行位操作。在实际应用中,位运算符。

buhuiyingyuaaa的博客 265

基于STM32设计的老人监护系统(OneNet)_118

该项目是基于STM32设计的老人监护系统。本系统可以通过脉搏心率传感器,体温传感器检测老人的脉搏状态,体温状态,把老人的数据状态在STM32单片机内部进行处理,然后通过GSM模块上传到OneNet云平台,在通过可视化界面显示出来,这样可以让子女随时随地了解到老人现在的身体情况,以便对老人的突发情况能够做出及时的预防和处理。而且如今,随着老人年纪不断的增长,身体体质不断的衰弱,在上楼梯或者走斜坡的时候很容易会发生摔倒或跌倒,如果不及时的接收到治疗,很可能会造成很严重的后果。

7456

YOLOv11改进 | 模型知识蒸馏篇 | 利用模型蒸馏改进YOLOv11进行无损涨点 | CWDLoss(在线蒸馏 + 离线蒸馏)

这篇文章给大家带来最新改进的是模型的蒸馏利用教师模型指导学生模型从而进行模型的涨点,本文的内容不仅可以用于论文中,在目前的绝大多数的工作中模型蒸馏是一项非常重要的技术,所以大家可以仔细学习一下本文的内容,本文从YOLOv11的项目文件为例,进行详细的修改教程,文章内包括完整的修改教程,针对小白我出了视频修改教程,如果你还不会我提供了修改后的文件大家直接运行即可,所以说不用担心不会适用!模型蒸馏真正的无损涨点,蒸馏你只看这一篇文章就足够了!欢迎大家订阅我的专栏一起学习YOLO!

Snu77的博客 3309

按位与运算符(&)

参加运算的两个数据,按二进制位进行“与”运算。 运算规则:0&amp;0=0; 0&amp;1=0; 1&amp;0=0; 1&amp;1=1; 即:两位同时为“1”,结果才为“1”,否则为0 例如:3&amp;5 即 0000 0011 &amp; 0000 0101 = 0000 0001 因此,3&amp;5的值得1。 另,负数按补码形式参加按位与运算。 “与运算”的特殊用途: (1)清零。如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零。

2516

Vue3 - Element Plus 树形表格组件 el-table 一键全部展开折叠功能,支持动态数据及懒加载点击父级才去请求的场景,Tree树状表格每行带有children的表格全部收起和折叠!

vue3,element-plus,表格Table组件,el-table,怎样一键展开/收起,一键展开或折叠树形表格,如何通过按钮来实现全部展开,不生效,一键折叠或展开表格,表格children嵌套,带有子集,多级表格,懒加载,动态数据,table表格的children通过后端请求过来的怎么一键展开请求数据呢,表格如何一键展开和折叠,怎么使用,教程,树形数据table全部展开和折叠,一键展开或折叠树形表格,点击展开接口获取数据,toggleRowExpansion,树形表格懒加载与全部折叠,深层多级,复杂,

🏆 前端领域优质创作者 6803

&*p和*&a的区别

int *p = &amp;a; &amp;和*运算优先级相同,按自右向左结合; &amp;*P——》&amp;(*p)——》&amp;a——》取变量a的地址; *&amp;a——》*(&amp;a)——》*p——》a——》变量a的值;

Catherinemin的博客 687

GameFramework框架详解之 Network网络框架

NetworkManager只负责维护NetworkChannel,实际的有种我们简历网络连接的也是NetworkChannel作为一个网路频道,这样管理起来比较方便,比如:一个游戏可能有多个网络连接,那么我们建立多个网络频道即可,或者当我们一个网络频道断线后,我们可以直接再新建一个,防止数据混乱。/// /// 网络管理器。/// /// 网络频道。/// 用户自定义网络错误事件。/// 检查是否存在网络频道。/// 获取网络频道。/// 获取所有网络频道。

TxNet 3366

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

c++ 中的符号* 和 &

* 和 &amp; 是c++中非常常见的一对符号。但实际使用中有极其多的变化需要注意。 先说* , 严格地说,符号*其实有2个作用: 1. 当* 出现在声明变量或者函数的时候,意为该变量或者函数为一个指针 2. 其他场景* 意为对变量取数值 而不能单纯的把*理解成取值,否则会出现矛盾 例如 int a = 20; int *b = &amp;a; std::cout &lt;&lt; *b &lt;&lt; std::endl; 从第二行来看,我们把a的地址赋给了*b,但是明显第三行打印出来

kangshuangzhu的博客 2万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an &ldquo;advanced algorithms&rdquo; book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

C/C++中&和*的区别详解,以及一些小问题

/ 参数声明为 struct uci_package* &pkg。printf("*ptr的值: %d\n", *ptr);// 使用*访问指针指向的值。// pkg是指向uci_package的指针。// 获取ptr指向的值(解引用)printf("ptr存储的地址: %p\n", ptr);int *ptr = # // 获取num的地址并赋给指针ptr。// 3. pkg的地址 (&pkg),让函数可以修改pkg的值。int *ptr = # // 声明ptr为指向int的指针。

m0_64155347的博客 2866

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C\C++中运算符&、*、 *&和 **&的区别

符号分析 &amp;:取地址运算符,返回操作数所指的内存地址 *:间接寻址运算符,返回操作数内存地址的值 *&amp;:&amp;返回操作数的内存地址,*&amp;取操作数内存地址的值,即操作数本身的值 **&amp;:**&amp;的操作数只能为指针,&amp;为指针自己的地址,*&amp;为指针所指向的地址,**&amp;为指针所指向的地址的值 main.cpp #include &lt;QCoreApplication&gt; int main(int argc, char *argv[

星辰大数据的博客 5016

C语言基础丨运算符之指针运算符*和取地址运算符&(九)

C语言的指针 指针就是地址,指针也是C语言的一种数据类型。 用指针类型定义的变量称作指针变量,指针变量储存的不是普通数据而是一个地址,一个变量的地址称为该变量的指针。 指针变量定义的一般形式为:类型标识符 * 变量名 星号是指针类型的标志。 C语言指针变量的使用需要以下两个运算符: &amp;:取地址运算符,它返回运算对象的内存地址。 * :指针运算符,也称为“间接引用操作符”,它返回指针指的变量的值。 1.取地址运算符 &amp; &amp; 是一元运算符,返回操作数的内存地址。如果操作

Hsuesh的博客 6543

C++中*与&和**&

在c++中,当申明变量int *p 的时,表示p是一个储存地址的变量;比如int p=0,表示p指向地址为00000000的地址单元。当申明指针p之后,再用p表示p指向的储存空间的内容;&amp;表示取变量的地址; 下面用一些代码来解释*和&amp;的关系; #include&lt;iostream&gt; using namespace std; int main(){ int a=123; //&amp;a表示a在内存中的地址,也就是123在内存中的地址 cout&lt;&lt;

三番鱼 4169

2. 地址运算符&和间接寻址运算符*

2. 地址运算符&和间接寻址运算符* 2.1 可以使用&获得变量的地址 2.2 可以使用*获得指针指向的变量值 2.3 实例 #include void test1(){             int i = 100;             // pi是指向i的指针             int *pi = &i;             printf("pi=%p,&i

u014464353的专栏 3580

C/C++中*和&的用法

在C++中*与&的用法的简单总结。

彩虹糖的博客 14万+

C++ 中的 * 与 & 运算符详解

本文介绍了C++中指针操作的两个关键符号:*(解引用)和&amp;(取地址)。&amp;用于获取变量内存地址,返回指针;*用于访问指针指向的值。文章解析了它们的用法差异,包括指针定义与解引用、函数参数中的引用、以及指针与引用的结合使用,并通过交换变量的示例演示了实际应用。最后总结了这两个符号在不同场景下的作用:&amp;用于取地址,*用于解引用,同时区分了指针声明和引用传递中的符号含义。

Tipriest的博客 1177

C,C++中 * 、&、 *&的区别

C,C++中 * 、&amp;、 *&amp;的区别*在C语言中的用法&amp;在C语言中的用法*&amp; 在C语言中的用法 在C/C++中,*和&amp;有很多用法,具体的使用要根据代码内容来确定。 *在C语言中的用法 指针的声明:int *p 或 int* p; 读法:p是指向一个整数类型的指针。 复合指针: int **p;或int** p; 读法 p是一个指向一个指向整数类型的指针的指针。 解引用: x=*p 把指针p指向的值赋值给x。 &amp;在C语言中的用法 求地址运算符:p=&a

大白的博客 2078

关于C++取地址运算符&和指针运算符*的讨论

2、首先C++相对于C来说引入了重载运算符的概念,大家可以简单的理解为给同一个运算符定义多个功能,像取地址运算符&和指针运算符*就是被定义了多个功能,所以导致一些新手在学习的过程中经常产生疑惑和误解。(&a)指的是把变量a的地址取出来,这 里括号可以省略,为了方便理解才加上。1、最近再学习C++的时候学到了指针的内容,发现有很多同学对于取地址符号&和指针运算符*有些误解,于是这篇文章简单的讨论一下这两个符号的个人见解,希望大家指正。当&和变量在一起的时候,其实是取这个变量的地址。

2201_75765880的博客 466

【C++小白必看:彻底搞懂*和&的多种用法】

摘要:本文深入浅出地讲解了C++中*和&amp;符号的多种用法。&amp;有三种主要用途:作为取地址运算符获取变量内存地址、在声明时创建变量的引用别名、以及作为按位与运算符进行二进制运算。*同样有三种用法:作为乘法运算符、在声明时表示指针变量、以及作为解引用运算符访问指针指向的值。文章通过简单易懂的代码示例,帮助初学者理解这些容易混淆的符号在不同上下文中的具体含义和应用场景,并提供了常见错误提示和调试建议。掌握这些基础概念对学习C++指针和引用至关重要。

深耕CV 1690
上一篇: C++一些奇怪题目收集
下一篇: Ogre创建地形过程和分析
HNFXS985
博客等级 码龄14年 219粉丝 150原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值