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

问题描述:

在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)表示为数组的各元素即等效于
a[n].为什么会矛盾呢?而且书上有这样的一句话:数组指针变量向前或向后移动一个位置,和地址加1或减1在概念上是不同的.何解?
1个回答 分类:综合 2014-09-24

问题解答:

我来补答
注意 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是一个值
 
 
展开全文阅读
剩余:2000
上一页:第九题,详解
下一页:gyyv