-3

我希望了解以下两段代码。我不精通 C++ 和指针以及可以与它们一起使用的操作对我来说仍然有点不清楚。

第一段代码

我很难理解这个函数的实际作用。它接受一个无符号字符指针并返回一个。但我目前看到的方式,它只是返回一个指向与原始位置相同的指针。不过,我可能是错的。

unsigned char* MemoryPool::GetNext(unsigned char* pBlock)
{
    unsigned char** ppChunkHeader = (unsigned char**)pBlock;
    return ppChunkHeader[0];
}

编辑:我尝试提高格式的质量并澄清我的问题。感谢您的有用评论和回答。

第二段代码

我知道这是一个 typedef,它为类型名称 ActorComponent 下的函数指针起别名(这是一个正确的术语吗?)。但是函数指针的函数类型返回什么?如果函数指针语法是:

void (*foo)(int);

那么下面这行代码中括号前的星号是什么意思呢?

typedef ActorComponent *(*ActorComponentCreator)(void);
4

3 回答 3

2

如果我们看这个:

typedef ActorComponent *(*ActorComponentCreator)(void);

并稍微改变一下:

typedef ActorComponent* (*ActorComponentCreator)(void);

更清楚的是,它是一个指向函数的函数指针,该函数返回指向ActorComponent.

与之比较:

typedef int* (*FuncReturningInt)(void); 
于 2013-07-22T19:29:00.577 回答
2

在我看来,第一个并没有多大作用。它将传入的指向 unsigned char 的指针转换为指向 char 的指针(一种危险的旧 c 风格)。然后它使用数组取消引用的行为类似于指针取消引用的事实将原始指针返回到无符号字符。

typedef ActorComponent *(*ActorComponentCreator)(void);

创建一个函数指针。在这种情况下,ActorComponentCreator 是指指向函数的名称,该函数采用 void 并返回指向 ActorComponent 的指针。

于 2013-07-22T19:26:05.760 回答
1

第一个代码被赋予一个unsigned char *(近似地对待它,就像它是一个void *; 是非常旧的代码,或者基于非常旧的软件),将它转换为一个指向一个指针的指针unsigned char,然后返回第零个unsigned char *。因此,它将传递的位置视为unsigned char *值数组的开始,并返回该数组中的第零项。在 C++ 中,这不是很好的代码;作为 C 代码,它会更受人尊敬。

第二个代码声明了一个指向名为 的函数类型的指针ActorComponentCreator。该函数返回一个ActorComponent *; 该函数不接受任何参数。

于 2013-07-22T19:26:51.230 回答