在c语言中,有如下式子:int a[5],*pa=a; pa+=2; 他说:*pa=a+2*2=a+4,而不是=a+2 这是为什么呢?

这个问题,在《c语言程序设计教程》书上有原题,我只是不懂pa为什么等于a+4而不是a+2。可是在后面的章节中,又出现了*(pa+n)和*(a+n)表示为数组的各元素即等效... 这个问题,在《c语言程序设计教程》书上有原题,我只是不懂pa为什么等于a+4而不是a+2。可是在后面的章节中,又出现了*(pa+n)和*(a+n)表示为数组的各元素即等效于
a[n]。为什么会矛盾呢?而且书上有这样的一句话:数组指针变量向前或向后移动一个位置,和地址加1或减1在概念上是不同的。何解?
展开
 我来答
inasm
推荐于2017-11-09
知道答主
回答量:6
采纳率:0%
帮助的人:0
展开全部
在这行代码中int a[5],*pa=a; pa的值就是数组a的首地址, pa+=2就是向后移动两个元素的位置,pa+=2 和 pa = a +2是一样的,而不是a +4。a+4就是从数组的首地址开始移动4个偏移量,是错误的。
White_MouseYBZ
2017-11-09 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:8155万
展开全部
因为他在胡扯——*pa不可能是a+4,因为*pa是元素a[2],而a+4是a数组的最后一个元素的地址,二者类型就不匹配!正确的是:有了int a[5],*pa=a; pa+=2; ,pa==a+2。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
疯狂夏风翼
2011-03-17 · TA获得超过1550个赞
知道小有建树答主
回答量:320
采纳率:0%
帮助的人:124万
展开全部
我来回答你的问题,举个例子吧~int a[5]={3,5,7,5,8},*pa=a是把3的地址赋给了pa指针,pa+=2后为pa指向7了,a+2*2=a+4,要考虑优先级啊,呵呵~~~所以才会这样~~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
leafingleaf
2011-03-26
知道答主
回答量:7
采纳率:0%
帮助的人:0
展开全部
注意 pa+n指的是pa指向对象+n,也就是指向后面第n个对象。
题目中的a+4意思应该是a的地址+4,比方说原来pa = a = (short *)0x100,现在pa+2就是0x104,
也就是a地地址上+4,
但是实际上,如果在程序中写a+2,实际上和pa+2相等的,因为a的类型大小本身就是2,所以感觉是你的理解没有错,书上也没有错,但书上的意思表达不清,一句话:
((unsigned long) a) +4 = (unsigned long) (a+2)
你理解的a+2,何书上说的a+4是一个值
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
念陌幻蜜23
2011-03-19
知道答主
回答量:12
采纳率:0%
帮助的人:5.2万
展开全部
http://zhidao.baidu.com/question/239200331.html
类似问题,上面解释详细
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式