有关数组的一个简单问题#include stdio.h#include stdlib.hmain(){static int a[]{1,3,5,7,9}int i,
有关数组的一个简单问题
#include <stdio.h>
#include <stdlib.h>
main()
{
static int a[]={1,3,5,7,9};
int i,*p;
for(p=a,i=0;p+i<=a+4;p++,i++)
printf("%4d",*(p+i));
printf("\n");
for(p=a+4,i=0;i<5;i++)
printf("%4d",p[-i]);
printf("\n");
}
在这个程序中为什么说:
printf("%4d",p[-i]);
这个语句与
printf("%4d“,*(p-i))等价 呢??? 求解释! 烦劳各位大侠了!~~
[解决办法]
p[-i]可以表示为*(p-i);其实,p-i就是指针p所指的位置向左偏移i个元素。
[解决办法]
http://blog.csdn.net/supermegaboy/article/details/4855027 内详
[解决办法]
p[i]
=>>等效于:
*(p + i)
所以:
p[-i]
=>>
*(p + (-i));
也就是 *(p - i);
[解决办法]
如果楼主能明白p[i]和*(p+i)是等价的。那么就很容易明白p[-i]和*(p-i)是等价的了。p[-i]的意思就是将p的值减去i*4(因为是整型,4个字节).将这个结果指向的地址的值读出来。这和*(p-i)是完全一样的。
建议楼主还是看看指针和数组的基础知识吧。
