指针运算适配何种算术类型?指针差值计算类型选型咨询
指针差值的标准适配类型
有专门的标准类型可用,不需要自己写宏检查:
ptrdiff_t,它在<stddef.h>头文件中定义,是C标准指定的用于存储两个指针相减结果的有符号整数类型,其大小会适配当前平台的指针宽度,保证能容纳合法指针差值的范围。你当前用的
size_t是无符号类型,虽然多数场景下能存下正的指针差值,但ptrdiff_t是专门为指针相减设计的类型:- 它是有符号的,能正确处理差值为负的情况(比如指针顺序意外颠倒时);
- 完全符合C标准对指针相减结果的类型要求——当两个指针指向同一数组(包括字符串,因为字符串本质是char数组)的元素或数组末尾位置时,相减的结果类型就是
ptrdiff_t。
你的场景正好符合合法指针相减的要求:两个char指针都关联同一个字符串,一个是起始位置,另一个是
strtoumax()/strtod()返回的解析终止位置,直接用ptrdiff_t存储它们的差值即可,示例代码:#include <stddef.h> #include <stdlib.h> char *str = "123.45"; char *endptr; strtod(str, &endptr); ptrdiff_t diff = endptr - str;
内容的提问来源于stack exchange,提问作者Tenobaal
相关产品推荐
相关产品推荐

