首先给出两个小程序;
a.正确运行的程序:
#include <stdio.h>
void main()
{
int a[10] = {1,2,3,4,5,6,7,8,9,10};
int *p;
for (int *p = a;p < &a[10];)
*p++ = 0;
//************或者下面for语句****************//
//for (int *p = &a[10];p > a;)
//*--p = 0;
}
b.错误运行的程序:
#include <stdio.h>
void main()
{
int a[10] = {1,2,3,4,5,6,7,8,9,10};
int *p;
for (int *p = &a[9];p >= a;)
*--p = 0;
}
其错误提示如下:
分析:
b中程序在数组第1个元素a[0]被清除之后,指针p的值还继续减下去,而接下去的一次比较运算是用于结束循环的。
但就是问题所在:比较表达式p >= a(即:p >= &a[0] )的值是未定义的!因为指针p已到了数组的边界之外。标准允许
指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针进行比较,但不允许与数组第1个元素之前的
那个内存位置的指针进行比较。