是否允许比较两个类型为`char *`的指针

时间:2013-06-12 22:53:20

标签: c pointers

是否可以比较char *类型的两个指针 就像代码段中的p<pkt+n一样?如果不允许,有没有更好的方法来替换条件?

      int n = 40;
      char *pkt = malloc(4);
       ...
      char *p;
      p=pkt;

      while(p<pkt+n){
           ...
           p+=4;
           ...
           p++;
           ..blabla
      }

3 个答案:

答案 0 :(得分:3)

是的,这是允许的。请注意,您只分配了4个字节,但是您将继续循环迭代40个字节。

答案 1 :(得分:3)

如果两个指针指向同一个“对象”,则允许这样做,例如单个内存分配,相同结构或相同数组。

编译器通常允许您比较指向不同对象的指针,但不保证结果具有任何特定含义。例如,

char *x = malloc(10);
char *y = malloc(10);
if (y > x) { ... }

编译器(可能)不会抱怨if语句中的比较,但不保证具有任何特定含义。但是,在大多数平台上,这实际上会比较您期望的地址。

答案 2 :(得分:0)

只要比较中涉及的指针指向同一数组的元素或超过其结束的一步,原始条件就有效。您也可以用等效条件替换它

while (p - pkt < n)

后一种变体比较整数而不是指针,但仍然依赖于与原始变体完全相同的指针属性。换句话说,这只是个人品味的问题。