【发布时间】: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