#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。
当表达式中使用allocbuf
时allocbuf+ALLOCSZE-allocp>=n
它将衰减为字符指针,因此指针算术是正确的。
当内存不足时,函数将返回 0。
我建议您将返回值更改为 NULL,将函数参数的类型更改为 size_t。并且不要忘记,您从函数 alloc() 获得的内存只能用于类型 char
。