【发布时间】:2015-07-28 22:55:30
【问题描述】:
我有一个 malloc 的指针数组,它形成了一个哈希表。要遍历哈希表,我会使用指针算术,例如:
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 以便在for 条件的增量部分正确添加吗?还是加起来有关系?
【问题讨论】:
-
既然你已经在使用索引了,
i,你也可以避开指针:for(long i = 0; i < tableSize; i++) { tc = table+i; ...}或者:{ tc = &table[i];} -
OT:你应该把
i变成size_t。 -
其实你期望做
tc += tcs的效果是什么?因为我担心它可能不会做你希望它做的事情。 -
简而言之:
tcs在这里没用。只需执行++tc即可转到下一个数组项。 -
@alk 这就是我问的原因。因为在我看来,OP 想要
++tc(相当于tc += 1)的效果似乎是合理的,但是——除非在sizeof(char) == sizeof(node_t *)的极其奇怪的平台上运行——他的代码会做一些不同的事情。
标签: c pointers hashtable ptrdiff-t