这是K&R书ch5中的一个例子,这个例子是定义我得到的alloc函数,但是我陷入了困境,无法理解为什么他返回旧指针,并且在第一个语句allocp += n;
中他增加了allocp然后他递减了allocp - n
这是我的第一个问题,如果条件阻塞我也无法理解
if(condition is true)
do something;
当他编写return语句时,如果角色将完成并返回旧指针,并执行一个循环。并且无法覆盖所有n个细分受众群。
我的第二个问题是,如果在if块中写入return而不是在if块中写入,则返回true呢?
这是整个代码
#define ALLOCSIZE 1000
static char allocbuf[ALLOCSIZE];
static char *allocp = allocbuf;
char *alloc(int n)
{
if(allocbuf + ALLOCSIZE - allocp >= n ) // it fits
{
allocp += n;
return allocp - n; // old p
}else
return 0;
}
最佳答案
该函数应该分配内存,并返回指向已分配段的指针,而allocp
仅用于跟踪已分配的内存量。
从if
语句内部返回是可以的,但是根据经验,应该尽量避免从同一函数返回多个return语句。
您可以这样重写函数,这可能更清楚:
#include <stdint.h>
#define ALLOCSIZE 1000
static uint8_t allocbuf [ALLOCSIZE];
static size_t alloc_size = 0;
uint8_t* alloc (size_t n)
{
uint8_t* result = NULL;
if(alloc_size + n < ALLOCSIZE)
{
result = allocbuf + alloc_size;
alloc_size += n;
}
return result;
}