C++ 如何比较指针? int回文(char*str){ char*pt1=str; char*pt2=str; 如果(pt1==NULL){ 指针指向内存中的某个位置。 因此,指针的值就是一个内存地址。对于给定的内存分配,指针中的每个字节都是连续的,并为其分配了下一个更高的地址(0x0000、0x0001、0x0002等等) 因此,当一个指针大于另一个指针,并且两个指针属于相同的内存分配时,它在所述分配中的位置会更高。

C++ 如何比较指针? int回文(char*str){ char*pt1=str; char*pt2=str; 如果(pt1==NULL){ 指针指向内存中的某个位置。 因此,指针的值就是一个内存地址。对于给定的内存分配,指针中的每个字节都是连续的,并为其分配了下一个更高的地址(0x0000、0x0001、0x0002等等) 因此,当一个指针大于另一个指针,并且两个指针属于相同的内存分配时,它在所述分配中的位置会更高。,c++,c,pointers,C++,C,Pointers,指针模拟内存地址。因为第一个指针指向第二个指针之前的内存某处,所以小于比较成功 当它们在中间相遇时,它们不会继续,因为当 A==B < /代码>时, < b>代码>必须是错误的。 < p>在代码中使用的两种比较, PT1

指针模拟内存地址。因为第一个指针指向第二个指针之前的内存某处,所以小于比较成功


当它们在中间相遇时,它们不会继续,因为当<代码> A==B < /代码>时,<代码> < b>代码>必须是错误的。

< p>在代码中使用的两种比较,<代码> PT1和<代码> *PT1!**PT2。在第一种情况下,比较内存地址,即在您现在所在的字符串中。t2,您的指针正在交叉或将要交叉。在第二种情况下,您使用
*
-运算符取消对指针的引用,并比较这些指针指向的值。

指针是地址。当您比较两个指针时,它是在比较它们的地址,这对您的使用是错误的。您需要保持偏移量或其他值r整数类型的变量,以确定位置何时满足。

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

  • 指针在连续内存块(输入字符串)上运行
  • 指针“值”是地址(基本上只是运行时分配的任意数字)
  • C以定义良好的递增方式为连续内存分配地址
  • 由于指针实际上只是整数(如0x000001、0x000002等),因此可以对它们使用比较运算符


    最后,由于字符串的内存将是连续且不断增加的,因此您可以进行一定程度的抽象:内存中较远的指针的计算结果将大于内存中较早的地址。

    挑剔:标准不要求指针实际上是内存地址;尽管可以说,对它们的要求意味着内存地址的模型。一致性实现也可以在指针中存储段偏移量或类似的内容。但是+1.完全错误。以这种方式比较指针具有完全定义良好的行为。您可能会更好地从字面上“消费”从两端开始的字符串。这实际上是去掉一个字符,在字符串的开始和结束之间交替。然后您根本不需要比较,因为字符串将被完全使用(空)当它们相遇并且循环终止时。在这个应用程序中使用偏移整数与使用指针相比没有任何技术优势。如果你想说“更好”,你必须说明原因。@chris,“消费”也不合适,没有合理的方法“去掉字符”在每一端。移动指针是最直接的实现方式。@KimKardashian,是的,最有可能在指针类型之间进行“强制转换”。与此相关的还有一个void指针(void*)例如,可以取
    pt1
    的值。但是,您不能取消引用它,因为它没有指向任何类型的对象。方法1不是更好吗?这是因为指针指向的值可能沿同一内存线相同。对吗?s/continuous/continuous/g:)+1
    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;
    }