0

是否允许比较片段中的两个类型char * 的 指针?p<pkt+n如果不允许,有没有更好的方法来替换这个 while 条件?

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

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

3 回答 3

3

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

于 2013-06-12T22:54:20.393 回答
3

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

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

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

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

于 2013-06-12T22:56:36.980 回答
0

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

while (p - pkt < n)

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

于 2013-06-12T23:33:28.213 回答