首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C:将int转换为size_t

C:将int转换为size_t
EN

Stack Overflow用户
提问于 2011-03-30 09:59:48
回答 3查看 61.5K关注 0票数 15

在32位和64位的linux平台上,在C99中转换/转换intsize_t的正确方法是什么?

示例:

代码语言:javascript
运行
复制
int hash(void * key) {
    //...
}

int main (int argc, char * argv[]) {
    size_t size = 10;
    void * items[size];
    //...
    void * key = ...;
    // Is this the right way to convert the returned int from the hash function
    // to a size_t?
    size_t key_index = (size_t)hash(key) % size;
    void * item = items[key_index];
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-30 10:57:24

所有算术类型都在C中隐式转换。你很少需要强制转换--通常只有当你想要向下转换,减少模1加上较小类型的最大值时,或者当你需要强制算术进入无符号模式以使用无符号算术的属性时。

就我个人而言,我不喜欢看到投射,因为:

  1. 他们是丑陋的视觉混乱,
  2. 他们向我建议,写代码的人得到了关于类型的警告,并在不理解警告原因的情况下抛出了强制转换来关闭编译器。

当然,如果您启用了一些超挑剔的警告级别,您的隐式转换可能会导致许多警告,即使它们是正确的……

票数 19
EN

Stack Overflow用户

发布于 2011-03-30 10:13:25

代码语言:javascript
运行
复制
size_t key_index = (size_t)hash(key) % size;

很好。你甚至不需要演员阵容:

代码语言:javascript
运行
复制
size_t key_index = hash(key) % size;

做同样的事情。

票数 5
EN

Stack Overflow用户

发布于 2012-05-15 15:33:31

除了类型转换问题(如前面所述,您不需要)之外,代码中还可能出现一些更复杂的问题。

如果hash()应该返回一个数组的索引,那么它也应该返回一个size_t。因为它没有,所以当key_indexINT_MAX大时,你可能会得到奇怪的效果。

我会说sizehash()key_index应该都是同一类型的,当然可能是size_t,例如:

代码语言:javascript
运行
复制
size_t hash(void * key) {
    //...
}

int main (int argc, char * argv[]) {
    size_t size = 10;
    void * items[size];
    //...
    void * key = ...;

    size_t key_index = hash(key) % size;
    void * item = items[key_index];
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5481067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档