a是数组名p是指针那*p=a和p=a有什么区别

 我来答
犁秀荣实雪
2020-03-12 · TA获得超过3.6万个赞
知道大有可为答主
回答量:1.4万
采纳率:33%
帮助的人:932万
展开全部
首先你要明白,a是个十六进制的地址常量,a其实就是a[0]这个数值的地址,也就是a=&a[0] , p这个字母一般把它定义为地址, *p就是p指向的数值的值,你却把一个值定义为一个地址(*p=a 这种写法是错误的),不符合常理。不能这样定义, 只可定义为p等于a ,也就是*p等于a[0],p指向a[0], 你所求的是 *(p+2)的值,也就是求 a[3]的值。 因为有个定理因为当p=a,也即*p=a[0]时 那么 a[1]==*(p+1) a[2]==*(p+2) ..... 依次类推 a[i]==*(p+i) ,你所求的就是 *(p+2) 就是a[2],也就是3. 阴差阳错,你定义的错了,结果却对了,我也有点糊涂了。
这是你的跑图
正确的用法
我知道你的问题了,你写的没错。
你定义的时候,同时定义了数组和地址变量并且赋值,你用的是逗号隔开的,不是分号,你所谓的*p=a
其实是
int
*p=a,
也就是
int
*p
;
p=a;
一句话,你写的并没有错。只是容易误解。
欢迎大家给我点赞,这么多回答的,就我才是明白人。
鄞望亭苑婵
2020-03-11 · TA获得超过3.8万个赞
知道大有可为答主
回答量:1.4万
采纳率:28%
帮助的人:978万
展开全部
如果a都是基础类型,
而不是指针,
比如a为int
那么
p=&a,
是把a的地址,赋值给p,
p需要是int
*类型。
而*p=&a
是把a的地址赋值给*p,
p需要是int
**类型。
注意
如果是int
*p=&a;这种形式
是定义int
*类型的p,
并给p初始化为&a。
等效于
int
*p;
p=&a;
还是给p赋值,而不是给*p赋值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
申白筠sr
2020-03-14 · TA获得超过3.6万个赞
知道小有建树答主
回答量:1.4万
采纳率:33%
帮助的人:940万
展开全部
数组特别一点,数组的地址就是第一个元素的地址。
p=a的话,那么p就是数组地址,也可以说p是数组中第一个元素的地址。
p=a也就是p=&a[0]
*p是数组地址对应的那个数据,就是数组首个元素对应的那个数据,就是数组首个元素。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
都利叶怀春
2020-04-27 · TA获得超过3.8万个赞
知道大有可为答主
回答量:1.4万
采纳率:34%
帮助的人:926万
展开全部
首先知道p是地址,a也是个地址,地址去换一个地址是可以的。
关于出现了*p=a的状况(注意a是个地址)则是因为你是把对*p的定义和赋值放到了一起,此时格式上是可以这样写的,如果是单纯的已经定义过的就不能写成*p=a;
总之*p=a是一种特殊情况(谭浩强的书里有这样的例子)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式