C语言 使用静态缓冲区的地址算术


#define ALLOCSZE 1000  

static char allocbuf[ALLOCSZE]; /* storage for alloc */
static char *allocp=allocbuf;     /* next free position */
char *alloc(int n) /* return pointer to n characters */
{
    if(allocbuf+ALLOCSZE-allocp>=n)
    {
        allocp +=n;
        return allocp-n;
    }
    else
        return 0;
}

在条件( if(allocbuf+ALLOCSZE-allocp>=n))下,分配的大小是否等于字符的大小

sizeof(allocbuf) 等于数组的大小为 1000。

当表达式中使用allocbufallocbuf+ALLOCSZE-allocp>=n它将衰减为字符指针,因此指针算术是正确的。

当内存不足时,函数将返回 0。

我建议您将返回值更改为 NULL,将函数参数的类型更改为 size_t。并且不要忘记,您从函数 alloc() 获得的内存只能用于类型 char

最新更新