【问题标题】:You can't use pointer arithmetic on void pointers, so how do arrays of void pointers work?您不能对 void 指针使用指针运算,那么 void 指针数组如何工作?
【发布时间】:2019-11-17 03:16:15
【问题描述】:

通过阅读教程,我的理解是在幕后 operator([]) 与指针运算相同。

Learncpp 有以下说法“事实证明,当编译器看到下标运算符 ([]) 时,它实际上会将其转换为指针添加和取消引用!”。

Wikibooks 然后说“声明为某种类型的数组的变量充当指向该类型的指针。当它自己使用时,它指向数组的第一个元素。”

然后在阅读了关于 void 指针的内容后,我很想知道它们的数组是如何工作的?我想我对某事的理解一定是错误的。

例如,以下两个应该是相同的。

一)

void* array[5];
array[1] = nullptr;

b)

void* array[5];
*(array + 1) = nullptr;

【问题讨论】:

  • 请记住,数组衰减为指向其第一个元素的指针。也就是说,array 衰减为&array[0]。而那个衰减的指针具有void** 类型,您可以对它进行指针运算。
  • 您的问题是什么? void 指针的大小是已知的(虽然是特定于体系结构的......)。例如32位。因此 (array +1) 实际上会将 4 个字节(如果 sizeof(void) 为 4,则每个元素的大小)添加到基地址。
  • 我的问题是, operator([]) 是如何工作的,因为似乎存在矛盾,但上述评论澄清了这一点。事实上,我希望他将其发布为答案,以便我将其标记为正确。

标签: c++ arrays void-pointers pointer-arithmetic


【解决方案1】:

在您的情况下,指针数组基本上只是 ** - void**

您知道void* 的大小,因为它只是另一个指针。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-30
    • 2020-04-01
    • 2021-07-22
    • 2013-12-18
    • 1970-01-01
    • 2011-04-01
    相关资源
    最近更新 更多