通过阅读在网上的职位相关的size_t
和ptrdiff_t
,我想确认以下内容:
如果一个数组的最大大小小于1/2*(max number represent-able by size_t)
,我可以安全地使用ptrdiff_t
并检查指向同一个对象的两个指针之间的相对距离吗?(因为我在谈论数组,"指向同一个对象的指针"意味着"指向同一个数组的指针") .
如果我想声明一个可以表示来自另一个指针的偏移量的变量,我最好将其声明为类型ptrdiff_t
?
如何输出类型size_t
和ptrdiff_t
C和C++中的变量?以下是否正确:size_t类型的变量的跨平台格式字符串?
是OR的uintptr_t
另一个名称size_t
它应该作为一个单独的类型使用size_t
?
是ssize_t
和OR的intptr_t
另一个名称ptrdiff_t
必须以不同的方式使用?
我开始在Ubuntu上使用gcc.我在使用别人的代码时发现了这些类型.
ADDed:我确实希望能够使用负补偿.使用uintptr_t
和任何差异intptr_t
?
Mik*_*our 20
1:如果数组的最大大小小于1/2*(最大数字表示能力
size_t
),我可以安全地使用ptrdiff_t
并检查两个指向同一对象的指针之间的相对距离吗?
如果是这样的话sizeof(size_t) <= sizeof(prtdiff_t)
.在合理的实施中将是这种情况,但不能保证.
2:如果我想声明一个可以表示来自另一个指针的偏移量的变量,我最好将其声明为类型
ptrdiff_t
?
是的,这就是该类型的用途.
3:如何在C和C++中输出size_t和ptrdiff_t类型的变量?
在C:
printf("%zu %td\n", size, ptrdiff);
Run Code Online (Sandbox Code Playgroud)
在C++中:
std::cout << size << ' ' << ptrdiff << '\n';
Run Code Online (Sandbox Code Playgroud)
4:是OR的
uintptr_t
另一个名称size_t
它应该用作单独的类型size_t
吗?
它应该被视为一种单独的类型.uintptr_t
是一个整数类型,可以包含转换为整数的任何指针值; 它可能不存在于某些平台上.
5:是
ssize_t
和OR的其他intptr_t
名称ptrdiff_t
必须以不同的方式使用?
ssize_t
就C或C++语言而言,它不是标准类型; 它由Posix定义为一些函数参数和返回值的类型.ptrdiff_t
除了直接处理Posix函数时,最好使用.
intptr_t
用于保存指针的整数表示,而不是指针之间的差异.在某些平台上,这些可能具有不同的大小,并且intptr_t
可能根本没有定义,因此它们不应互换使用.
我确实希望能够使用负补偿.使用
uintptr_t
和任何差异intptr_t
?
不要使用这些类型中的任何一种来表示偏移量; 用ptrdiff_t
.在特殊情况下,当您希望将指针转换为其整数表示形式时,请使用这些类型.
归档时间: |
|
查看次数: |
4669 次 |
最近记录: |