【发布时间】:2013-12-18 17:49:18
【问题描述】:
我一直在思考。我还没有找到任何直接回答这个问题的东西,但我想我知道答案;我只是想从一些更有经验的人那里得到一些意见。
已知:
一个空指针只指向一个内存地址。它不包含类型信息。
一个 int 指针指向一个包含 int 的内存地址。它将读取内存地址中指向整数的任何内容,而不管最初填充到地址中的内容。
问题:
如果一个 void 双指针 void ** foo 指向一个动态分配的 void 指针数组
void ** foo = malloc(sizeof(void *) * NUM_ELEMENTS);
这是真的吗,正如我所假设的那样,由于 void 指针的独特性质实际上缺乏任何类型的信息,而不是 void ** foo 一个等效的语句将是
void * bar = malloc(sizeof(void *) * NUM_ELEMENTS);
当我通过分配特定类型来使用间接访问时,例如 with
(有人指出我不能取消引用 void 指针。为了清楚问题的目的,下一行更改为适合该信息)
int ** fubar = bar;
我会从 single void 指针中得到一个适当的指针,它只是 acting 就像一个 double 指针?
还是这一切都在我的脑海中?
【问题讨论】:
-
您不能取消引用 void 指针。我认为在没有编译器扩展的情况下你也不能用它来做指针运算。你需要先投射它。
-
如何使用 int ** fubar = bar; ?
-
我认为可能会起作用,直到您尝试取消引用它。如果您将指针强制转换为错误的类型并尝试取消引用它,C 将不会执行转换以尝试使操作有意义。你会得到未定义的行为。
标签: c pointers void-pointers indirection