在许多标准的开源代码中,我看到在不同的地方使用了不同的指针类型,例如:
uint32 fooHash (uint8 *str, uint32 len)
我不明白的是:-为什么要声明int为uint32,uint8?所有这些都将在用户空间本身运行,那么为什么不直接以uint本身的形式离开呢?以后,可移植性不是一个问题吗?
发布于 2013-01-09 21:11:58
指针的类型引用它包含的数据类型,而不是指针本身的大小。实际上,所有指针都是相同大小的。(*但见下文的评论)
如果您有一个uint8*
,则指针引用一个uint8
值数组。这与uint32*
不同,后者指的是一个uint32
值数组。
回答你问题的另一面..。之所以将这些类型显式化,是因为并非所有编译器都同意int
的大小。这是个便携的东西。
发布于 2013-01-09 21:12:26
并不是所有的数据都以signed int
的形式存储。uint8*
在许多方面都很有用:字符串、二进制数据(如网络数据包或文件的一部分)。
有时您只需要uint8,因为要存储在那里的值的范围位于[0,256[
中。
不要忘记,我们讨论的不是指针的类型,而是指向数据的类型。指针是一个指针(根据体系结构,指针的大小将是正确的),不管它所指向的类型是什么。
发布于 2013-01-09 21:24:36
这都取决于您正在使用的硬件和编译器。
如果您只使用int,您可以得到不同的大小。您还可以在unix和windows上获得不同的大小。
编译器所需的全部内容都来自C99标准。
sizeof(short) <= sizeof(int) <= sizeof(long) < sizeof(long long)
以下是Windows平台的int类型大小(位):
Type C99 Minimum Windows 32bit
char 8 8
short 16 16
int 16 32
long 32 32
long long 64 64
你应该看看
以下是它们被命名的大小
int8_t
int16_t
int32_t
int64_t
int8_t
https://stackoverflow.com/questions/14246526
复制相似问题