【发布时间】:2021-02-13 23:58:25
【问题描述】:
在我之前问过的问题中已经提到过,将指针转换为整数类型并不是一个好习惯。有哪些例子说明这不是一个好主意?像下面这样的东西呢?为什么会被认为是不好的做法?
short first_local_int = 44;
int second_local_int = 92;
printf(
"The difference between the two memory addresses (in bytes) is: %lu",
(unsigned long) &second_local_int - (unsigned long) &first_local_int
);
两个内存地址之间的实际差异(以字节为单位)为:2
【问题讨论】:
-
问题是
unsigned long的大小可能与指针的大小不同。 -
在将指针解释为数字时应该使用
intptr_t。 stackoverflow.com/questions/6326338/… -
在我的平台上
unsigned long是 32 位,但指针的大小是 64 位。 -
C 允许将指针转换为整数(通过强制转换)。但它明确拒绝为结果整数值定义任何特定意义。
-
对不指向同一个对象(或过去一个元素)的指针进行算术运算也是未定义的行为。