是否可以比较char *
类型的两个指针
就像代码段中的p<pkt+n
一样?如果不允许,有没有更好的方法来替换条件?
int n = 40;
char *pkt = malloc(4);
...
char *p;
p=pkt;
while(p<pkt+n){
...
p+=4;
...
p++;
..blabla
}
答案 0 :(得分:3)
是的,这是允许的。请注意,您只分配了4个字节,但是您将继续循环迭代40个字节。
答案 1 :(得分:3)
如果两个指针指向同一个“对象”,则允许这样做,例如单个内存分配,相同结构或相同数组。
编译器通常允许您比较指向不同对象的指针,但不保证结果具有任何特定含义。例如,
char *x = malloc(10);
char *y = malloc(10);
if (y > x) { ... }
编译器(可能)不会抱怨if语句中的比较,但不保证具有任何特定含义。但是,在大多数平台上,这实际上会比较您期望的地址。
答案 2 :(得分:0)
只要比较中涉及的指针指向同一数组的元素或超过其结束的一步,原始条件就有效。您也可以用等效条件替换它
while (p - pkt < n)
后一种变体比较整数而不是指针,但仍然依赖于与原始变体完全相同的指针属性。换句话说,这只是个人品味的问题。