首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么使用不同的指针类型?

为什么使用不同的指针类型?
EN

Stack Overflow用户
提问于 2013-01-09 21:09:17
回答 3查看 8.8K关注 0票数 0

在许多标准的开源代码中,我看到在不同的地方使用了不同的指针类型,例如:

代码语言:javascript
运行
复制
uint32 fooHash (uint8 *str, uint32 len)

我不明白的是:-为什么要声明int为uint32,uint8?所有这些都将在用户空间本身运行,那么为什么不直接以uint本身的形式离开呢?以后,可移植性不是一个问题吗?

  • 另外,如果您想在32位系统上运行开源代码,为什么要有一个指针作为uint8 *ptr呢?
EN

回答 3

Stack Overflow用户

发布于 2013-01-09 21:11:58

指针的类型引用它包含的数据类型,而不是指针本身的大小。实际上,所有指针都是相同大小的。(*但见下文的评论)

如果您有一个uint8*,则指针引用一个uint8值数组。这与uint32*不同,后者指的是一个uint32值数组。

回答你问题的另一面..。之所以将这些类型显式化,是因为并非所有编译器都同意int的大小。这是个便携的东西。

票数 5
EN

Stack Overflow用户

发布于 2013-01-09 21:12:26

并不是所有的数据都以signed int的形式存储。uint8*在许多方面都很有用:字符串、二进制数据(如网络数据包或文件的一部分)。

有时您只需要uint8,因为要存储在那里的值的范围位于[0,256[中。

不要忘记,我们讨论的不是指针的类型,而是指向数据的类型。指针是一个指针(根据体系结构,指针的大小将是正确的),不管它所指向的类型是什么。

票数 2
EN

Stack Overflow用户

发布于 2013-01-09 21:24:36

这都取决于您正在使用的硬件和编译器。

如果您只使用int,您可以得到不同的大小。您还可以在unix和windows上获得不同的大小。

编译器所需的全部内容都来自C99标准。

代码语言:javascript
运行
复制
sizeof(short) <= sizeof(int) <= sizeof(long) < sizeof(long long)

以下是Windows平台的int类型大小(位):

代码语言:javascript
运行
复制
Type           C99 Minimum     Windows 32bit
char           8               8
short          16              16
int            16              32
long           32              32
long long      64              64

你应该看看

以下是它们被命名的大小

代码语言:javascript
运行
复制
int8_t
int16_t
int32_t
int64_t
int8_t 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14246526

复制
相关文章

相似问题

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