- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
嗯,size_t
、uintptr_t
、intptr_t
和 ptrdiff_t
类型在 C 编程语言中的定义让我很困惑。
我注意到在使用flat memory mode的32位系统上,上述四种类型的实际大小是:
sizeof(size_t) = sizeof(uintptr_t) = sizeof(intptr_t) = sizeof(ptrdiff_t) = 4
而在使用flat memory mode的64位系统上,以上四种类型的实际大小为:
sizeof(size_t) = sizeof(uintptr_t) = sizeof(intptr_t) = sizeof(ptrdiff_t) = 8
但是,我仍然很好奇这四种类型在使用分段寻址模式的16 位系统上的实际大小。
根据 Windows 3.1x ,Windows 3.1x 是一系列的 16 位操作系统。但是我找不到合适的C语言编译器来测试和验证真正的答案。
最佳答案
在real mode , size_t
和 ptrdiff_t
是 16 位类型。指针的大小取决于它是否是 near, far, or huge。指针。近指针有 16 位,其他 32 位。 intptr_t
和 uintptr_t
只是在 C99 中定义的很晚。
关于c++ - 在使用分段寻址模式的 16 位系统上, `size_t` 、 `uintptr_t` 、 `intptr_t` 和 `ptrdiff_t` 类型的实际大小是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36385767/
ptrdiff_t 的无符号拷贝是什么?类似地 - size_t 的签名拷贝是什么? 我想要实现的是拥有一个无符号类型,我可以使用它来存储 ptrdiff_t 变量的正值,而不必担心大值 - 这似乎是
我正在查看 C++ experimental extensions for concurrency并注意到新的同步类 latch、barrier 和 flex_barrier。他们都执行标准 barr
我正在通过连续的内存块实现迭代器,并遇到了有关其一致性用法的问题。我当前的实现(假设我正在遍历 char 数组)。 typedef struct iterator{ void *next_pt
在我调用 C 函数的 Go 程序中,我可以从 int 成功转换至 ptrdiff_t . (有点令人担忧的是,即使 Go 类型对于任何现代架构来说都太小了,int8 也能成功编译。)然而 *int至
我一直想知道:ptrdiff_t 是否应该能够保存任意两个指针的差异定义?两个指针太远怎么会失败? (我不是指任何特定的语言...我指的是所有具有这种类型的语言。) (例如,当您有 32 位指针时,从
用于将指针 i 和 j 减去同一数组对象的元素 the note in [expr.add#5]阅读: [ Note: If the value i−j is not in the range of
我不明白为什么 gnu C 编译器使用 2 个名称几乎相似的不同宏 - __PTRDIFF_TYPE__ 和 ptrdiff_t - 因为它们与语义相同. 这些宏的定义是here . 我问了一个类似的
我对以下简单比较有疑问: #define BUF_SIZE //maybe large static char buf[BUF_SIZE]; static char *limit; // some p
我有一个名为 node 的简单结构,它包含一个值 + 2 个指向下一个/上一个节点的指针。 template struct node { node *prev = NULL; n
在我的系统上,ptrdiff_t 和 size_t 都是 64 位。 我想澄清两件事: 我相信由于地址空间的限制,没有数组可以像size_t 一样大。这是真的吗? 如果是,那么是否可以保证 ptrdi
如果您有以下代码,其中 p 是一个指针: p = p + strlen(p) + size_t(1); 由于 strlen() 和 size_t 都是 size_t,我应该将代码转换为 ptrdiff
在我的平台上(以及我认为的大多数平台上)std::size_t和 std::ptrdiff_t具有相同的大小和相同的对齐方式。有没有哪个平台不是真的?简而言之:标准是否要求? 最佳答案 In shor
在此blog entry by Andrey Karpov entitled, "About size_t and ptrdiff_t"他总结道: As the reader can see, usi
我收到了这样的代码行entr -= normed_eigval * log(normed_eigval)/log(dim); 虽然 normed_eigval 源自 complexArray*,但我知
哪一行是定义指针的正确(最佳)方法? typedef ptrdiff_t pointer; // pointers are ptrdiff_t. -- or -- typede
我很难在 size_t 之间做出选择和 ptrdiff_t对于索引的类型,应该需要能够存储负值。 准确地说,在我的代码中我需要实现一个数组。我收到它的长度(在构造函数中)作为 size_t 的类型,当
C 标准(ISO/IEC 9899:2011 或 9899:1999)定义了一个类型 ptrdiff_t在 . POSIX 标准(ISO/IEC 9945;IEEE Std 1003.1-2008)
ptrdiff_t 在 C 中定义在哪里? 最佳答案 它在 stddef.h 中定义。 该 header 定义了整数类型 size_t、ptrdiff_t 和 wchar_t,函数宏 offsetof
通过阅读与 size_t 和 ptrdiff_t 相关的在线帖子,我想确认以下几点: 如果数组的最大大小小于 1/2*(max number represent-able by size_t),我可以
我正在尝试实现 strlen函数,我遇到了这个实现 在 linux kernel : size_t strlen(const char *s) { const char *sc; fo
我是一名优秀的程序员,十分优秀!