c语言地址
正面或负面不是指针类型的有意义的方面。 它们属于有符号整数,包括signed char,short,int等。
人们谈论负面指针主要是在将指针的机器表示视为整数类型的情况下。 例如reinterpret_cast(ptr) 。 在这种情况下,他们实际上是在讨论转换的整数。 不是指针本身。
在某些情况下,我认为指针本质上是无符号的,我们在下面或上面讨论地址。 0x0AAAA.0000高于0x0AAAA.0000 ,这对人类来说是直观的。 虽然0x0AAA.0000实际上是“负”,而0x0AAA.0000是正数。
但在其他情况下,指针减法(ptr1 – ptr2)产生一个符号值,其类型为ptrdiff_t,当你与整数的减法比较时,它会不一致, signed_int_a – signed_int_b结果是一个有符号的int类型, unsigned_int_a – unsigned_int_b产生一个无符号类型。 但是对于指针减法,它产生一个有符号的类型,因为语义是两个指针之间的距离,单位是元素的数量。
总之,我建议将指针类型视为独立类型,每种类型都有它的操作集。 对于指针(排除函数指针,成员函数指针和void *):
项目清单
+ ,+ =
ptr + any_integer_type
– , – =
ptr – any_integer_type
ptr1 – ptr2
++前缀和后缀
– 前缀和后缀
注意指针没有/ * %操作。 这也支持指针应被视为独立类型,而不是“类似于int的类型”或“基础类型为int的类型,因此它应该看起来像int”。