【发布时间】:2021-04-21 04:39:58
【问题描述】:
为什么 C 为两个指针之间的差异定义了一个单独的类型?例如,为什么不能将其定义为long long,甚至不能定义为intmax_t?有没有过intmax_t 不等于ptrdiff_t 的时候?
基本上,这个typedef(具有特定的字符串格式等)有用的意义是什么?作为一个基本的使用示例,我正在做:
int a = 1, b = 2;
printf("%td XXX\n", (char *)(&b) - (char *)(&a)); // 't' is formatter for prtdiff_t
【问题讨论】:
-
出自标准:当两个指针相减时,都指向同一个数组对象的元素,或者指向数组对象最后一个元素的元素;结果是两个数组元素的下标之差。 结果的大小是实现定义的,其类型(有符号整数类型)是在
头文件中定义的 ptrdiff_t 。 -
@DavidRanieri 所以
ptrdiff_t的重点是基本上表示数组索引偏移量?例如“1 个元素”、“2 个元素”等? -
是的,换句话说:
sizeof(a - b) == sizeof(ptrdiff_t) -
在世界上几乎所有 PC 计算机(64 位操作系统)上,intmax_t 都小于 ptrdiff_t
-
@0___________ 谁说的?在几乎所有 64 位平台中,
intmax_t与ptrdiff_t的类型相同
标签: c language-lawyer pointer-arithmetic ptrdiff-t