
在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在概念上是不同的。何解? 展开
a[n]。为什么会矛盾呢?而且书上有这样的一句话:数组指针变量向前或向后移动一个位置,和地址加1或减1在概念上是不同的。何解? 展开
6个回答
展开全部
在这行代码中int a[5],*pa=a; pa的值就是数组a的首地址, pa+=2就是向后移动两个元素的位置,pa+=2 和 pa = a +2是一样的,而不是a +4。a+4就是从数组的首地址开始移动4个偏移量,是错误的。
展开全部
因为他在胡扯——*pa不可能是a+4,因为*pa是元素a[2],而a+4是a数组的最后一个元素的地址,二者类型就不匹配!正确的是:有了int a[5],*pa=a; pa+=2; ,pa==a+2。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我来回答你的问题,举个例子吧~int a[5]={3,5,7,5,8},*pa=a是把3的地址赋给了pa指针,pa+=2后为pa指向7了,a+2*2=a+4,要考虑优先级啊,呵呵~~~所以才会这样~~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
注意 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是一个值
题目中的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是一个值
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询