【发布时间】:2018-04-09 19:25:26
【问题描述】:
我想计算两个地址之间的字节数。
uint32_t length = &b - &a;
当a和b为uint32_t时,长度为1。
uint32_t a, b;
uint32_t length = &b - &a; // length is one
当a和b为uint8_t时,长度为4。
uint8_t a, b;
uint32_t length = &b - &a; // length is four
因此,计算是 a 和 b 之间的 uint32_t 或 uint8_t 的数量,而不是我错误预期的地址之间的数学差异。
我的问题:C 语言的哪一部分涉及地址计算?有人可以参考规范中讨论该主题的位置吗?
【问题讨论】:
-
技术上,不指向同一个对象的指针之间的指针运算是未定义的行为。
-
指针都有一个类型。他们指向什么样的东西?两个指针之间的区别在于它们之间的 事物 的数量,而不是字节数。
-
很好奇,为什么代码使用类型
uint32_t表示uint32_t length = &b - &a;而不是int、long long或ptrdiff_t? -
在某些系统上,不同的对象可能放在different memory segments 中,然后可能没有距离。
标签: c pointers memory byte sizeof