C语言: 有以下声明: int a[5]; 为何语句:a++;是非法的,而语句:*(a+3)是合法的?

不好意思,打错了,应该是为什么语句:*(a+3)=4是合法的?

这是指针里面的内容,a表示的是数组的首地址,注意它是固定不变的,就像一个常量一样,不能改变.
而*(a+3)表示的是数组里第四个数,*a是第一个数,*(a+1)是第二个,这是数组特有的,因为数组在内存里是顺序存放的,所以加1就表示下一个数的地址,再加*,就表示是那个数了.
具体可以参考c语言指针的书,这个是很基本的
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-02-05
a表示的是你定义的数组的首地址,就是个常量
a++;这个语句只能用于a是变量的时候;
*a 指的是地址a上的值,*(a+3)表示的是首地址后3位的地址上的值(因为数组地址是连续的,所以可以这样表示)
第2个回答  2013-02-05
jinkehouse回答的很好,这两天我也在搞这个,等你将来理解的多了可以看看函数指针,函数指针数组,函数指针的指针数组,二位数组,二位数组的指针数组。
第3个回答  2013-02-05
因为数组名是常量常量是不能进行++的懂了?就像1++你觉得可以吗?1+3当然可以了懂了吧
第4个回答  2013-02-05
*(a+3)等价于*(a[0]+3)等价于*(a[3])
第5个回答  2013-02-05
a ,顾名思义自加1,而作为数组名,本身就是一个指针常量,常量没有存储空间,自然不能自加1,就像不能写5 一样。

后面那个是指对数组成员赋值,和a[3]=4 是一模一样的,是指针形式的访问