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-从开始移动fwds开始
pt2-从结尾开始向后移动
现在我不希望他们在中间相遇后继续。
所以我检查是否总是pt1
为什么?我没有比较* pt1与* pt2。
它比较什么值?

最佳答案

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

  • 您的指针在连续的内存块(输入字符串)上运行
  • 指针“值”是地址(基本上只是运行时分配的任意数字)
  • C以明确定义的递增方式为连续内存分配地址

  • 由于指针实际上只是整数(例如0x000001、0x000002等),因此可以在它们上使用比较运算符。

    最后,由于该字符串的内存将是连续的且不断增加的事实,因此您可以创建一个抽象级别:内存中更远的指针的计算结果将大于内存中较早的地址。

    关于c++ - 指针如何比较?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14450523/

    10-12 01:30