如何比较指针?

时间:2013-01-22 02:15:29

标签: c++ c pointers

int palindrome(char * str){
char * pt1 = str;
char * pt2 = str;
    if(pt1==NULL){
        std::cout<<"\n invalid string";
        return -1;
    }
    while(*pt2 != '\0')
        pt2++;
    pt2--;
    while(pt1 < pt2){ // why does this work correctly ?
        if(*pt1 != *pt2){
            std::cout<<"\n not palindrome";
            return 0;
        }
        else{
        pt1++;
        pt2--;
        }
    }
std::cout<<"\n yes palindrome";
return 1;
}

您好
这是一个检查传递的char *是否指向回文的功能。
这里有两个指针 pt1 - 从开始动作开始 pt2 - 从结束开始向后移动
现在我不希望他们一旦在中间见面就继续..
所以我检查是否总是pt1 为什么?我不是在比较* pt1和* pt2 它比较了什么价值?

5 个答案:

答案 0 :(得分:4)

指针指向内存中的某个位置。 因此,指针的值是存储器地址。对于给定的内存分配,其中的每个字节都是连续的,并为其分配了下一个更高的地址(0x0000,0x0001,0x0002,依此类推) 因此,当指针大于另一个指针并且两个指针属于相同的内存分配时,它在所述分配中更进一步。

答案 1 :(得分:2)

这是导致这段代码正确执行的三个概念:

  1. 您的指针在连续的内存块(输入字符串)上运行
  2. 指针'values'是地址(基本上只是在运行时分配的任意数字)
  3. C以明确定义的方式为连续内存分配地址
  4. 由于指针实际上只是整数(例如0x000001,0x000002等),因此可以在它们上使用比较运算符。

    最后,由于字符串的内存将是连续且不断增加的,因此您可以进行抽象级别:内存中的指针将进一步评估为而不是早先在中的地址

答案 2 :(得分:1)

指针模拟内存地址。因为第一个指针在第二个指针之前指向内存中的某个位置,所以比较成功。

当他们在中间相遇时,他们不会继续,因为当a == b时,a < b必须为假。

答案 3 :(得分:1)

您在代码中使用了两种比较,pt1 < pt2*pt1 != *pt2。在第一种情况下,您比较内存地址,即您现在在字符串中的位置。一旦pt1 >= pt2,您的指针正在穿越或将越过。在第二种情况下,使用* - 运算符取消引用指针,并比较这些指针指向的

答案 4 :(得分:-3)

指针是地址。当你比较两个指针时,它会比较它们的地址,这对你的使用是错误的。您需要维护一个偏移量或整数类型的其他变量,以确定何时位置相遇。