问题标签 [ptrdiff-t]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - ptrdiff_t 的使用
我正在通过连续的内存块实现迭代器,并遇到了关于它的一致性使用的问题。我当前的实现(假设我正在遍历char
s 数组)。
问题是标准声称6.5.6(p9)
:
当两个指针相减时,它们都应指向同一个数组对象的元素,或者指向数组对象的最后一个元素
这是真实的。我假设我正在迭代的区域是一个数组。
如果结果在该类型的对象中不可表示,则行为未定义。换句话说,如果表达式分别指向数组对象的
i
第 -th 和-th 元素,则表达式具有值,前提是该值适合类型为 的对象。j
(P)-(Q)
i−j
ptrdiff_t
的限制ptrdiff_t
定义为7.20.3(p2)
:
的限制
ptrdiff_t
PTRDIFF_MIN
−65535
PTRDIFF_MAX
+65535
不能保证用 表示的所有值size_t
都应该用 表示ptrdiff_t
。
所以我们根据限制来判断,我们最多可以一致地减去一个数组的指针65535
吗?所以这在我想减去两个指向未知大小数组元素的指针的一般情况下不起作用?
c - 我们可以减去 NULL 指针吗?
由于指针算术是在同一个数组中定义的,我怀疑我们是否可以NULL
从另一个NULL
. 我担心以下方面的实施:
c++ - size_t 的大小和对齐方式是否与 ptrdiff_t 相同?
在我的平台上(我认为在大多数平台上)std::size_t
并且std::ptrdiff_t
具有相同的大小和相同的对齐方式。有没有不正确的平台?简而言之:标准是否要求?
c - ptrdiff_t 的动机是什么?
为什么 C 为两个指针之间的差异定义了一个单独的类型?例如,为什么不能将其定义为long long
,甚至不能定义为intmax_t
?有intmax_t
没有不等于的时候ptrdiff_t
?
基本上,为什么这个 typedef(具有特定的字符串格式等)有用是什么意思?作为一个基本的使用示例,我正在做:
casting - 我可以在 C89 中将 void * 转换为 ptrdiff_t 吗?
C89 标准是否允许我将 void * 转换为 ptrdiff_t 以便我可以将内存位置打印为十六进制?
例如:
上下文:我正在内核空间中编写一个 printf() 函数。