c++中*p=a和p=&a的区别

C++模板元编程详细教程(之一) 《C++模板元编程详细教程》系列文章的第一篇,主要介绍了模板的概念以及基本的模板语法和相关示例。 阅读详情

大学初学指针的时候,时常懵逼,有时候觉得自己已经掌握了,但是一看复杂的程序和源码里的指针用法,就又蒙了,以至于谈指针色变。至于二级指针,数组指针、指针数组、函数指针什么的更是被吓懵。现在来逐个击破他们,为我们的编程道路扫清阻碍。

首先需要明白一点的是,指针是个变量,它和int类型、float类型等的变量一样,也存储在内存中,占据一定的字节。只是int变量存储的是整形数字,而指针变量存储的是地址,掌握了这点,攻破指针就指日可待了。

假设存在一个int类型的变量a,一个指向int类型的指针p。

现在来*p=a和p=&a的区别。先分析*p=a,这是一个赋值操作。这里可以把*p当成另外一个int b变量。b=a,是不是就很熟悉了。所以*p=a表示把a的值赋值给p所指向(存储)的内存地址。

再分析p=&a。这里就很好理解了,把a的地址,赋值给p。即p指向(存储)了a的地址。

结合实际例子分析:

运行环境:VS2013,语言:C++。

#include <iostream>
 
using namespace std;
 
int main()
{
	int a = 2;
	int *p = &a;
	printf("%d\n", *p);

	int *PA = new int;
	cout << "PA 地址=" << PA << endl;
	*PA = a;
	cout << "*PA=" << *PA << endl;
	cout << "PA 地址=" << PA << endl;	//地址不变

	cout << "------------我是分割线------------" << endl;

	int *PB = NULL;
	/*如果使用PB = &a后,对PB进行delete会报错,
	因为PB已经指向a的地址,对a进行delete操作,是不行的。
	但是不delete又会内存泄漏,所以用空指针指向a。
	*/
	//int *PB = new int; 
	cout << "PB 地址=" << PB << endl;	
	PB = &a;
	cout << "*PB=" << *PB << endl;
	cout << "PB 地址=" << PB << endl;	//地址变了

	delete PA;     //记得用delete释放指针PA占用的内存 
	PA = NULL;     //然后使指针指向空

	//delete PB;		
	//PB = NULL;

	getchar();
 

    return 0;
}

输出:

二者区别:

*PA=a;     表示把a的值赋值给PA所指的内存地址,PA本身没变。

PB=&a;    表示指针PB指向变量a的地址,PB本身变了。

【C++指针声明:`int* p = &a;` 还是 `int *p = &a;`?】小白也能懂 C++指针声明中int* p和int *p的区别只是代码风格问题,两者完全等价。关键区别在于多变量声明时:int* p, q中只有p是指针,而int *p, *q能明确两个都是指针。为避免混淆,建议使用int *p的写法,将*靠近变量名,这样在多变量声明时更不易出错。无论选择哪种风格,编译器处理结果相同,重要的是保持代码一致性。 阅读详情

相关推荐

[C/C++]数组与指针——a,a[0],&a,&a[0]区别小结

1.a,a[0],&a,&a[0] 通过在VS上实验,以下是关于C语言中数组与指针的关系——a,a[0],&a,&a[0]之间的区别小小的总结 对于二维数组a[3][5] a         int(*)[5]类型      ——即指向的是a[0] a[0]     int *类型           ——即指向的是a[0][0] &a       int(*)[3][5]类型

YupingLiu的技术博客 3561

*p=&a和*p=a的区别是什么?

*p=&a和*p=a的区别

weixin_42996227的博客 7567

高通camera open代码流程(hal到kernel)

内容:简单介绍Camera open代码调用流程,从HAl到kernel。(api1+hal1) 前言 Android camera api和hal对应关系。安卓在版本更新过程中,camera相关代码也经历了几个版本的更新,表现为camera HAL版本更新(HAL1->HAL2->HAL3),camera API版本更新(camera API1->camera API2),接下...

oxoo123的专栏 4276

int *p = &a、p = &a、*p = a的正确理解

C++指针表达、引用、野指针、内存分配

面条有点辣 2万+

安卓/苹果/支付宝sdk拉起支付宝h5/app支付

代码】安卓/苹果/支付宝sdk拉起支付宝h5/app支付。

m0_68973987的博客 5383

STM32驱动四位共阳极数码管实现高精度秒表计时器

本文详细介绍了如何使用STM32驱动四位共阳极数码管实现高精度秒表计时器。项目基于STM32F103C8T6最小系统板,通过定时器中断和GPIO控制,实现0.1秒精度的计时功能,并解析了共阳极数码管的动态扫描原理及按键消抖等关键技术。

n8m7b6v5c4的博客 951

int *p=a和int *p=&a的区别

  指针变量用来存放指针(或者可以理解成地址)。而 &amp;amp; 则是取地址运算符,因此给指针变量赋值的方式一般是把变量的地址取出来,然后付给对应类型的指针变量: int a; int* p = &amp;amp;a; 上面的代码也可以写成: int a; int* p; p = &amp;amp;a;   需要注意的是, int* 是指针变量的类型,而后面的 p 才是变量名,用来存储地址,因此地址 &amp;amp;...

qq_39131699的博客 6万+

信奥赛csp初赛高频考点【位运算】(详细解析)

信奥赛csp初赛高频考点【位运算】(详细解析)

王老师青少年编程 368

*p=&a和*p=a的区别

p=a,表示将a的值赋给指针p所指向的内存位置。这意味着将a的值放入到指针p所指向的内存地址中。*p=&a,表示将指针p的值设为a的地址。这意味着p指向a,*p表示通过指针p访问a的值。- *p=a是将值赋给指针所指向的内存位置,可以通过*p访问该内存位置中存储的值。- *p=&a是将地址赋给指针,可以通过*p访问该地址中存储的值。*p=&a和*p=a的区别在于赋值的方向不同。

2301_77127201的博客 2375

深度学习+遥感:2025最新土地利用分类资源大全(数据集/论文/代码)

近年来,深度学习在遥感影像土地利用分类领域取得了突破性进展,从传统的农田、森林识别,到复杂的城市功能区划分,AI正在重新定义我们对地表覆盖的认知。无论是科研还是工程应用,高质量数据集、前沿算法和开源工具都是成功的关键。本文精心整理了2024年最值得关注的土地利用分类资源,包括:✅ 10+个权威数据集(覆盖全球、多分辨率、多光谱/雷达)✅ 15+篇顶会论文(CNN/Transformer/自监督学习等SOTA方法)✅ 6大开源工具箱(PyTorch/Keras实现,即拿即用)

hanfeng5268的博客 1312

MATLAB - ROS 2 工具箱入门教程

ROS 工具箱提供了一个连接 MATLAB® 和 Simulink® 与机器人操作系统(ROS 和 ROS 2)的接口。利用该工具箱,您可以设计 ROS 节点网络,并将 MATLAB 或 Simulink 生成的 ROS 节点与现有的 ROS 网络相结合。工具箱包括 MATLAB 函数和 Simulink 块,可通过记录、导入和回放 rosbag 文件来可视化和分析 ROS 数据。您还可以连接到实时 ROS 网络,访问 ROS 消息。

机器人控制与仿真应用 3067

int *p = (int *)(&a + 1); int *q = &a[0] + 1;

#include <stdio.h> int main() { int a[] = { 1,2,3,4,5 }; int *p = (int *)(&amp;a + 1); int *q = &amp;a[0] + 1; printf("%d", *(p - 1)); printf("%d", *(q - 1)); return 0; } 输出结果5 1 解释 &amp;a+1不是首地址+1,系统会认为加了一个整个a数组,偏移了整个数组a的大小(也就是5个int的大小)。所以i

Green_Tao的博客 636

1、语义数据建模:避免陷阱与突破困境

本文探讨了语义数据建模的兴起背景、核心概念、生命周期及常见挑战。从数据丰富型组织和AI开发者的需求出发,分析了语义建模的关键元素和质量维度,并深入讨论了建模过程中可能出现的陷阱与解决方案。文章还针对语义模型的演化、治理和战略组织问题提供了突破思路,旨在帮助数据从业者更好地理解和应用语义建模技术,以提升数据驱动应用的有效性。

c8d9e0f1的博客 119

c与c++中&和*号的理解

对c与c++中&和*的理解

qq_37040743的博客 1687

Allegro如何改变线宽操作指导

用Allegro做pcb设计的时候,改变走线线宽是非常常用的功能,如下图。线宽目前是12mil,需要把线宽改成15mil。如何改变线宽操作指导。

weixin_54787054的博客 4254

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

数组指针和指针数组及引用的简单理解.md

a和&amp;amp;a的区别,及指针数组和数组指针的简单理解: 以代码的形式解释: #include &amp;lt;iostream&amp;gt; using namespace std; int main() { //a是数组时,a 和 &amp;amp;a的区别 int a[5] = { 1,2,3,4,5 }; int *ptr1 = (int *)(&amp;amp;a+1); ptr1--; cout &amp;lt...

zhi_it_coder的博客 1449

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

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

关于int* p, int *p, int* p = &a, *p = a的区别

一.int* p和int *p 首先这几种写法都是正确的,首先是int* p, int *p,这两个语法困扰了好久,我一直以为是C和C++指针定义上的不同,直到看到了https://www.stroustrup.com/bs_faq2.html#whitespace,这是C++本人的说明,大概信息是两者只是书写形式上的不同,表达了两种语言的强调点的不同,并没有对错之分。 C语言写者更倾向于: int *p,更强调语法,说明*p指向一个int类型 C++语言写者:int* p,更强调类型:p是一个指向i

qq_38201168的博客 8501

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

*p = a 与 int *p = &a 的区别

int *p = a 与 int *p = &amp;a 的区别 int a ; int *p = &amp;a; //将整形变量a的地址放入指针p中。 int a[1]; int *p = a; //将数组a的首地址放入指针p中。 int *p之后是地址变量。 ...

浮汐潇潇 4257

int * p =NULL;和*p =NULL的区别a和&a的区别

1.int * p =NULL;和*p =NULL的区别 1 .int * p =NULL int *p=NULL; 定义一个指针变量p,其指向的内存里面保存的是int类型的数据;再定义变量p的同时把p的值设置为0x00000000, 而不是把*p的值设置为0x00000000 2.*p =NULL int i =10; int * p =&amp;amp;i; *p =NULL; int i ...

csdn_kou的博客 4472

C语言 指针入门最大的误区:int *p=&a;a的地址赋值给的是p不是*p

在学C语言的途中,不免会遇到很多难题。相信学C和C++的同学们对指针一定有所耳闻,它也是大家在日后学数据结构的基础。重点来了:此时的&a赋值给的是p!!!或者我们可以换以下写法,看的更为清晰。可以看出,这个写法将 int 与 * 连在一起写了,我们便可以理解为:声明一个变量p,这个变量p的类型是 int* (注意,是int*不是int),然后将a变量的地址赋值给了p变量,也即 “指针p指向a”。所以我们再来对比一下指针的几种赋值:此时会发现这两种除了写法不同以外,作用却是完全相同的。

m0_46745664的博客 9957

c语言中关于int *p = &a 的解读

今天,贺贺问了我这个问题,我开始也有点懵,哈哈,后来懂啦! int a = 512, *p = &amp;a; 问*p的值是多少 int *p=&amp;a;这一句作用相当于int *p;p=&amp;a;两句 这句话的意思是定义一个int类型指针,然后用a的地址给p赋值; 所以*p就是取a地址中存放的值,*p=512; 对于指针p来说,*p就是指针p所指向的内存空间...

SEVENY_的博客 1万+

【C++】*P、P 、&P的区别

在刚开始接触到C++的时候一提到 指针P就会联想到一个箭头指向了一个地址,这是一个最为基础而且不算全面的理解,在后面的学习过程中总是能遇到类似指针的知识点,发现一个简单的指针包含的知识点很多。 下面就来介绍几个关于指针的知识点: 1. *P 、 P 、&amp;P的区别: 刚刚接触到C++的时候对于这三个符号表示困惑,好像是指针的意思,但是分不清楚他们之间的...

立志欲坚不欲锐,成功在久不在速度 1万+

a与&a的区别与联系

如果。

weixin_42492218的博客 4773

C语言基础知识:a a[0] &a &a[0]

一、解析为什么p = a;或者p = &amp;a[0]时类型匹配,p = &amp;a;类型不匹配? int *p; int a[10]; P = a; //a做右值表示数组首元素的首地址,【a做右值等同于&amp;a[0];】;类型匹配,左右两边都是int *型 p = &amp;a; //类型不匹配。原因:p是int * (int类型的指针),而&amp;a是int (*)[10...

baidu_37973494的博客 1万+

c++指针的理解 *p和**p的区别 *p与p区别

*p和**p的区别 一、指针级别不同 *p是一级指针。 **p是二级指针。 二、表示的含义不同 *p表示p所指向的地址里面存放的是一个int类型的值 。 **p表示p所指向的地址里面存放的是一个指向int类型的指针。 三、指向的内容不同 *p=a指针p将指向a上的内容。 **p=a将变量a的地址 通过指针p 赋值到变量b上。 四、存放的内容的地址不同 *p指向的地址里面存放的是一个值 。 **p...

ritagreen123的博客 1万+

const int *p 与 int *const p的区别 最方便理解的记忆方法

文章目录 const int *p int const *p int *const p const int * const p 总结 如果您对这几个有一定的了解,或者只是记忆模糊不清建议您直接看本文最后总结部分,相信对您有一个更好的理解记忆方式,如果您对此比较陌生,建议您从头观看,直观感受。 强调:总结是精华本分。 一、const int *p 直接上代码 这段代码会报错,那么为什么会报错,原因就是const封锁了*p *p是一个常量,所以他是不可以更改的。...

qq_45615577的博客 5669
上一篇: c++中new的理解
下一篇: 我们一起玩python之 列表
Qt上位机开发
Qt上位机开发 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄9年 9664粉丝 178原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值