观察一个循环,它用来清除一个数组中所有的元素。
#define N_VALUES 5 float values[N_VALUES]; float *vp; for(vp=&values[0];vp<&values[N_VALUES];) *vp++=0;
现在考虑下面这个循环:
for(vp=&values[N_VALUES];vp>&values[0];) *--vp=0;
注意:有人可能会反对像*--vp这种写法,认为可读性差,,写下了下面的写法:
for(vp=&values[N_VALUES-1];vp>=values[0];) *vp=0;
但是比较表达式vp>=&values[0]的值是未定义的,因为vp移到了数组的边界之外。标准允许指向数组元素的指针与指向数组最后一个n元素后面的那个内存位置的指针进行比较,但不允许与指向数组第一个元素之前的那个内存位置的指针进行比较。
原文地址:http://blog.csdn.net/wdkirchhoff/article/details/41482381