请问两个指针变量能比较大小吗?谢谢!!

2024-12-01 03:10:12
推荐回答(4个)
回答1:

指针就是内存地址,
说白了就是32位整数,
当然能比大小。

不过有意义吗??

幻の上帝 :
楼主说是16/64位平台了吗??
楼主的情况是寄存器地址空间吗??

“此外,共同的错误是,在C/C++中,指针有类型,地址没有类型。指针可以是一个对象,地址本身只是一个右值”
- 同意,但无论c/c++,指针经过运算后,在指令的形式内是以无符号整数、整型寄存器的值出现的

回答2:

可以啊
if(pointer_1 < pointer_2)
.............
如果比较所指变量则
if(*pointer_1 < *pointer_2)
即可,只是所指变量类型要匹配才行

回答3:

不能,
pointer_1与 pointer_2所表示的是地址
但*pointer_1与 *pointer_2可以,且是后者比前者大

回答4:

对象指针的值是映射到线性地址空间的整数值,C/C++允许对两个类型相同的对象指针进行比较运算,包括==、!=、<、>、<=、>=。所以LZ问题的答案是肯定的。
对于不同类型的对象指针,经过转换可以比较;由于C++的静态类型检查比C更严格,相同的代码有可能C++编译器产生编译错误,而C编译器仅因为缺少隐式转换产生警告。
C++的成员指针一般用偏移量实现,但不一定表示具体的地址或偏移量(可以看成一个成员不可见的结构体,和编译器以及指向的类型相关;甚至在同一编译器上不同成员指针类型的sizeof的结果都不是唯一的,这种情况下连按值转换都无法实现,自然不能比较),转换成整数是无意义的。类型不同的成员指针无法比较;类型完全相同的成员指针无法进行operator==和operator!=以外的(算术)比较运算。
----
zhsh955 错误。
指针就是内存地址,
↑错误,例如可能表示寄存器地址空间。
说白了就是32位整数,
↑错误,例如在16位平台上指针的值是一个16位无符号整数,在64位平台上指针的值是一个64位无符号整数。
此外,共同的错误是,在C/C++中,指针有类型,地址作为整数,没有类型(事实上地址根本不是语言本身应该涉及的概念)。指针可以是一个对象,地址本身只是一个右值。
====
[原创回答团]