gpt4 book ai didi

c - 这个涉及指针的算术表达式发生了什么?

转载 作者:太空狗 更新时间:2023-10-29 15:10:01 25 4
gpt4 key购买 nike

这是C语言的代码:

#define ALLOCSIZE 1000 /* size of available space */

static char allocbuf[ALLOCSIZE]; /* storage for alloc */
static char *allocp = allocbuf; /* next free position */

char *alloc(int n) /* return pointer to n characters */
{
if (allocbuf + ALLOCSIZE - allocp >= n) { /* it fits */
...
}
}

我不明白以下表达式中发生了什么:

allocbuf + ALLOCSIZE - allocp >= n

我知道allocbuf作为一个数组名相当于一个指向第一个元素&allocbuf[0]的指针,显然allocp是一个指针,最后那个ALLOCSIZE是一个简单的int。因此,将 ALLOCSIZE 添加到 allocbuff 会得到 allocbuff 的 ALLOCSIZE 索引元素,它也是一个指针。但是从指针 &allocbuf[ALLOCSIZE] 中减去指针 allocp 是我迷路的地方。我什至不确定是否可以在 C 中添加指针。

请告诉我在这个解释中我哪里错了或者我遗漏了什么。

这个程序的重点是存储字符。

最佳答案

该代码是一个固定缓冲区分配器,正在检查以确保您至少还剩下 n 个字节。它有助于以图形方式查看事物,我所说的图形方式是指使用 MSPaint:

allocator

所以分解表达式:

allocbuf + ALLOCSIZE - allocp >= n

allocbuf + ALLOCSIZE 是数组的结尾。 end 和 allocp 之间的区别是剩余的字节数。所以我们只是检查以确保差异至少为 n

减去两个指针,只要它们指向同一数组中的元素(或末尾后一个),明确定义为它们之间的元素数。举个简单的例子,allocbufallocbuf + ALLOCSIZE 都是指针(char* 类型),(allocbuf + ALLOCSIZE) - allocbuf == ALLOCSIZE,它们之间的元素数量(在本例中为 char 类型)。

关于c - 这个涉及指针的算术表达式发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32183334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com