C阵列/指针问题

5 c arrays pointers

通过K&R我也看看下面的代码:

#define ALLOCSIZE 1000
static char allocbuf[MAXLINE];
static char *allocp = allocbuf

char *alloc(int n){
       if (allocbuf+ALLOCSIZE-allocp>=n){
               allocp+=n;
               return allocp-n;
       }
       else { ... }
Run Code Online (Sandbox Code Playgroud)

我担心我的问题非常简单,但我无法理解"if"行.allocbuf有什么价值?它是一个char数组,对吧?我回头看了书中的数组内容,但没有用.allocp最初指向数组的第0个元素,对吧?

Bla*_*iev 2

allocbuf是一个类型为 的数组char [],但在许多情况下,标识符本身会衰减为类型为 的指针char *,保存数组的起始地址。请注意,这并不意味着它allocbuf是一个指针,它仍然是一个数组。

因此,语句的条件if执行一些指针运算。