那我后来说的看得懂吗?
a[0]是数组的入口,好比坐标原点。p是运动鼠标,一开始令p=a[0],即从原点开始出发,每次p++移动一个元素。判断的if,是p-a[0],即指针的当前位置与原点的距离,因为步进是1,所以如果这个距离能被4整除,则表示走了4的整数倍,此时应该输出一个回车作为换行。
又因为一开始偏移量p-a[0]=0,也能被4整除,所以一开始就多了个回车。
p++的增幅为1,因为p是指向int的指针,与数组a的元素相同,所以这个指针向前移动1个单元的意思是地址增加1个int数据长度,在这里不用管int到底是多少字节的,只要p的指向类型和a的元素类型相同就可以了。记住:指针p+1是p的地址加它所指向的数据类型的占位长度,不是地址加整数1。刚开始我看错了a[0]是元素的时候,就以为那是指针减第一个元素的整数值(当时是1),才说如果那是10就减出负数,指针越界了。现在其实不是这样,它真是指针与入口地址的运算,不存在那个问题。