绯红之章 纳妾:在C语言中是不是任意的同类型指针都可以比较大小,为什么?

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/28 19:35:47
我在《C和指针》上看到,如果不是指向同一个数组的指针,比较大小是没有定义的,而在很经典的内存拷贝函数memcpy上就没有看出这一点,可是编译运行都没有错误,结果也正确。
难道是《C和指针》上面的描述错了吗?

指针变量无非就是一个表示内存地址的长整数而已,当然可以比较。指向同一个数组时,两个指针的大小就表示谁指向的元素靠前或靠后。如果不是指向同一个数组,比较大小就只能看出谁指向的内存空间地址较小,没什么意义。

当然可以了. 你都说了是"同类型". 在C语言里除了结构体, 相同类型都可以比较.
就算是不同类型的指针, 你也可以把它们转换为void*型的指针, 然后进行比较. 比较一个指针就相当于是两个无符整型进行比较.

如果你说的是指针指向的数据进行比较, 那更好理解了. int*是指向int的指针. 两个int*型的指针指向的都是int型数据. 而两个int型数据当然可以进行比较.

指针变量无非就是一个表示内存地址的长整数而已,当然可以比较。指向同一个数组时,两个指针的大小就表示谁指向的元素靠前或靠后。如果不是指向同一个数组,比较大小就只能看出谁指向的内存空间地址较小,没什么意义。

首先要搞明白什么是指针
指针是一个变量,它存放的是内存地址
例如:int *p
其中,p的值就是*p指向的内存的地址,&p就是放在p这个内存地址中的数值,这个显然是int型的变量
换句话说,p作为内存地址,是可以和其他指针进行比较的,但是,无论怎么比较都是毫无意义的,它们的比较只能反映出数据所在的内存位置的前后关系
例如:int *p1
int *p2
p1<p2 如果p1储存在p2的前面则返回ture

首先,指针是什么?
指针是一个数据在内存中的地址,无论什么数据类型,指针都是一个地址,
地址当然可以比较大小了,

不是指向同一个数组的指针,比较大小是没有意义的,是没有应用和使用意义,除非是无聊!!!!