【发布时间】:2023-03-04 19:31:01
【问题描述】:
我正在阅读 C 标准中的以下内容:
(6.5.6 加法运算符)
9 当两个指针相减时,都应该指向 相同的数组对象,或超过数组的最后一个元素 目的;结果是两者下标的差 数组元素。
现在我想知道什么被认为是“数组对象”。更具体地说,我想知道以下愚蠢的例子是否合法?分配的内存块是否被视为一个“数组对象”?
uint8_t *data = malloc(255);
uint8_t *end = data + 255;
ptrdiff_t size = end - data;
【问题讨论】:
-
毫无疑问,就指针运算和§6.5.6 而言,malloc 的内存块绝对是一个“数组对象”。 (不过,我不能引用章节。)
-
@SteveSummit 谢谢史蒂夫,这些话让我平静了一点——我在很多地方都使用过这种指针算法
标签: c pointers language-lawyer pointer-arithmetic