c - 我应该将 size_t 转换为 ptrdiff_t 吗?

标签 c pointers hashtable ptrdiff-t

我有一个 malloc'ed 指针数组,它形成了一个哈希表。要遍历哈希表,我会使用指针算法,例如:

node_t ** tc = table;
size_t tcs = sizeof(node_t *);
for(long i = 0; i < tableSize; tc+=tcs, ++i) { 
    // Do some stuff with *tcs location in the table.
}

问题是我是否应该将 sizeof() 返回的 size_t 转换为 ptrdiff_t 以便在 的增量部分正确添加对于条件?或者它甚至对添加有影响吗?

最佳答案

您需要 ptrdiff_t 来处理负值。 size_t 处理正值,例如您示例中 sizeof 的结果,因此您不需要强制转换。

话虽如此,代码看起来很可疑:C 编译器将 struct 的大小考虑到您的指针算法中,因此您必须添加 sizeof(node_t*) 指向 node_t 的双指针可能是一个错误。如果要前进到指针数组中的下一个指针,请将 1 添加到该指针的当前值。编译器足够聪明,可以根据指针的类型将 1 乘以 sizeof(*ptr)

关于c - 我应该将 size_t 转换为 ptrdiff_t 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30286220/

相关文章:

C - 哈希表键的链表

在 C 程序中连接两个 char* 字符串

c - 制作类型结构双指针的结构成员

c - 使用 ld 实用程序与 dlfcn API 进行动态链接的优点是什么?

c - 如何在 C 中分配临时小内存段

java - Java哈希表中的哈希

c - 它仅在我将年份设为全局变量时有效,尽管只使用了一个主要功能

c - 双向链表。代码有效...应该吗?比其他解决方案少得多的代码

c - 在C中交换二维数组(指针到指针)

dictionary - 为什么 F#'s idiomatic dictionary collection (Map<K,V>) needs the type K to implement comparable while C#' s Dictionary<K,V> 没有?