这是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;
}

10-07 23:18