我正在学习 C,主要是通过 K&R,但现在我找到了面向对象的 C pdf 教程并且很着迷。我正在经历它,但我的 C 技能/知识可能无法胜任这项任务。这是教程:http ://www.planetpdf.com/codecuts/pdfs/ooc.pdf
我的问题来自于查看 pdf 前几章中的许多不同功能。下面是其中之一。(pdf第14页)
void delete(void * self){
const struct Class ** cp = self;
if (self&&*cp&&(*cp)->dtor)
self = (*cp)->dtor(self);
free(self);
}
dtor 是一个析构函数指针。但是对于我的问题,这方面的知识并不是真正必要的。
- 我的第一个问题是,为什么 **cp 是常数?是否有必要或只是彻底,以便代码编写者不会意外地做任何破坏性的事情?
- 其次,为什么 cp 是指向指针的指针(双星号?)。struct 类在 pdf 的第 12 页上定义。我不明白为什么它不能是单个指针,因为我们似乎将 self 指针转换为 Class 指针。
- 第三,如何将 void 指针更改为类指针(或指向类指针的指针)?我想这个问题最能说明我对C的理解不足。我脑海中想象的是一个空指针占用了一定的内存,但它必须小于类指针,因为一个类有很多“东西”在里面。我知道 void 指针可以“转换”为另一种类型的指针,但我不明白如何,因为可能没有足够的内存来执行此操作。
提前致谢