假设有一个函数(来自 Ritchie 的书的 vyata)
#define ALLOCSIZE 10000 /* размер доступного пространства */
static char allocbuf[ALLOCSIZE]; /* память для alloc */
static char *allocp = allocbuf; /* указатель на своб. место */
char *alloc(int n) /* возвращает указатель на n символов */
{
if (allocbuf + ALLOCSIZE - allocp >= n) {
allocp += n; /* пространство есть */
return allocp - n; /* старое р */
} else /* пространства нет */
return 0;
}
我对函数声明中的星号有误解。当我们在 main 中创建一个指针并在其上调用一个函数时
int main(){
char *p;
p = alloc(3);
}
那么,如果我们逐字考虑这个调用,那么我们会得到这个(如果我没记错的话)
p = (allocp-3);
不是这样的
p = *(allocp-3);
这个星号折磨我,我不太明白它是如何工作的(即在函数中)。只是标点符号,或者创建*alloc指针,然后从数组中分配地址,然后将指针分配给p = alloc指针。或者返回值本身。或者是其他东西。如果您理解我的问题的本质,请解释一下。
ps 这个星号是什么意思,我知道,我不太明白它在这个函数中是如何工作的
在声明中指定星号时,表示数据类型是指针。当您在声明之外指定它时,这是取消引用,即 在此指针指向的地址处获取数据。所以函数返回的不是给定地址的数据,而是指向适当数据类型的内存地址。如果您取消引用它,您将获得该地址的数据。
如果函数返回一个指向数字的指针
int
一个罐头和
v
*p
在这两种情况下都是相同的数字,但p
会有所不同。