c语言中*p=a与*p=&a有什么区别

 我来答
匿名用户
2017-01-03
展开全部

首先来说一下*和&,为了便于理解你可以认为,这里*是取内容,&是取地址。

我不讨论它们的区别,因为*p=&a这个形式一般是错的,常用的是p=&a。

下面比较*p=a和p=&a。看图,图很详细。

显然它们是等价的。

然后比较*p=&a和p=&a;

则这两种都是对指针变量的赋值,赋值有两种形式

①先定义后赋值

 int a=3,*p;(定义指针变量*p)

 p=&a;(对指针变量取地址)

②定义变量的同时赋值

int a=3,*p=&a


也就是说在赋值时,

int *p=&a

相当于

int *p,

p=&a 


它们的区别其实就是

int *p=&a是同时定义*p并对赋值p(即a的地址赋给P),而p=&a,只是对P赋值,没有定义指针变量。

但要注意,只有在同时定义赋值时“*p=&a”这种写法才是对的

其他情况下不要用*p=&a,这种形式,因为根本就不对,如下图。我之前一直的疑问是为什么赋值时*p=&a就不算错了?后来老师给的解释是这种形式只有在上面那种情况下成立,其他的情况确实都是错的。

清鹏之
2020-03-18 · TA获得超过227个赞
知道答主
回答量:42
采纳率:100%
帮助的人:1.7万
展开全部

让我来综合一下吧

在定义的时候

int *p=&a; 是等同于 int=*p;   p=&a;的。该形式只在定义的时候是正确的。就是指针p所指向地址的内容为a的内容。

如果不是定义的时候

*p=&a; 就是它字符的那个意思,就是指针p所指向地址的内容为a的地址。

Dev C++试了下

————————————————————————————————————

再附上一些我的相关笔记

“*p”表示地址为p存储单元的内容;“p”表示地址;“&a”表示取a的地址;a为变量。

int *p;//初始化指针,但是该指针无指向地址!如果直接使用会有问题。

int *p=&a;//初始化指针,该形式只在定义时正确,表示以p指针所指向地址的值为变量a的值。

p=&a;//表示指针p所指向的地址就是a的地址。即地址间的赋值。

*p=a;//表示指针p所指向地址的内容就是内容a。

在C中,指针一定要初始化,指针加1指的是增加一个存储单元。对数组而言,这意味着把加1后的地址是下一个元素的地址,而不是下一个字节的地址,这是为什么必须声明指针所指向对象类型的原因之一。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
方梓汐
2018-03-30 · TA获得超过8969个赞
知道小有建树答主
回答量:48
采纳率:100%
帮助的人:1.2万
展开全部

*p=&a;是将a的地址赋值给*p,结果会是一个十六进制的数。 第二个是让p指向a的地址空间。*p的傎和a相等。 int a=2,*p; *p=&a; 打印*P应该是一个地址值,很长一串, p=&a; 打*P印结果会是2;

对于指针来说,
*p = a[0],表示向地址为p的内存区域赋值为a[0]。

p = a[0],把变量p的值改为a[0],这个语句正常应用中是错误的。变量p的值为内存地址,这样赋值会丢掉p原来指向的内存。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
时光轨车永不停息
2017-01-03 · TA获得超过3267个赞
知道大有可为答主
回答量:2204
采纳率:55%
帮助的人:754万
展开全部
*p=a是将a的值给p指针指向的地址的值
*p=&a是将a的地址给p指针指向的地址的值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式