如题,考虑一个需求,一个缓冲区(能容纳N个字符的内存),当缓冲区满了之后,就将缓冲区的内容输出。
假设缓冲区输出的内容是flushbuffer()函数。
然后声明一个指针变量bufptr,让其指向缓冲区中第一个为占用的字符
#define N 1024
static char buffer[N];
static char *bufptr;
void bufwrite(char *p, int n) {
while(--n >= 0) {
if(bufptr == &buffer[N])
flushbuffer();
*bufptr++=*p++;
}
}
缓冲区满了之后,指针bufptr比较的是缓冲区最后的字符的下一个字符,即
buffer[N],这越界了,但是ASCII C标准明确表明允许这种用法:数组中实际不存在的"溢界"元素的地址位于数组所占内存之后,这个地址可以用于进行赋值和比较。
但是,引用该元素就是非法的