#include <stdio.h>
#include <stdlib.h>
main(){
int a[10] = { 5, 4, 9, 1, 10, 7, 8, 3, 2, 6 };
int *p = a;
int *pend = a + 10;
for ( ; p < pend ; p++ )
printf("%d ", *p);
system("PAUSE");
}
*pend=a+10;
这个地方我很不理解,a是数组的首地址,a+10是地址加上10,而p是指针,应为是整形数组整形在内存上是占2个字节的,p++实际上就等于p+2一直加下去,最后的地址结果就是相当于p+20,就是说等于a+20,但是这个程序执行时并未输出一半,而是全部输出这个是为什么呢?
a+1-----往后移动sizeof(int)个字节
p++-----往后移动sizeof(int)个字节
a+ 10= 数组a的首地址10*sizeof(int)
a+ 10= 数组a的首地址加上10*sizeof(int)
a不是一个地址吗?为何不是单单的加上10,而合指针p一样,加上10*sizeof(int)?这个地方很不理解谢谢大家了。
对比a和p的类型!!
编译器就所这样做的;如果是float p+10就所地址+sizeof(float);如果是结构体;就所sizeof(struct aa)