数组的关系运算

观察一个循环,它用来清除一个数组中所有的元素。

#define N_VALUES 5
float values[N_VALUES];
float *vp;
for(vp=&values[0];vp<&values[N_VALUES];)
            *vp++=0;

for语句使用了一个关系测试来决定是否结束循环,这个测试是合法的,因为vp和指针常量都指向同一数据中的元素(事实上,这个指针常量所指向的是数组最后一个元素后面 的那个内存位置)使用!=i代替<也是可行的


现在考虑下面这个循环:

for(vp=&values[N_VALUES];vp>&values[0];)
           *--vp=0;

它和前面那个循环所执行的任务g相同,但数组元素将以相反的次序清除。


注意:有人可能会反对像*--vp这种写法,认为可读性差,,写下了下面的写法:

for(vp=&values[N_VALUES-1];vp>=values[0];)
           *vp=0;

警告:在数组第一个元素被清除之后,vp的值还将减去1,而接下去的一次比较运算是用于结束循环的。

但是比较表达式vp>=&values[0]的值是未定义的,因为vp移到了数组的边界之外。标准允许指向数组元素的指针与指向数组最后一个n元素后面的那个内存位置的指针进行比较,但不允许与指向数组第一个元素之前的那个内存位置的指针进行比较。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值