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*
-运算符取消对指针的引用,并比较这些指针指向的值。指针是地址。当您比较两个指针时,它是在比较它们的地址,这对您的使用是错误的。您需要保持偏移量或其他值r整数类型的变量,以确定位置何时满足。这是引导此代码块正确执行的三个概念:
最后,由于字符串的内存将是连续且不断增加的,因此您可以进行一定程度的抽象:内存中较远的指针的计算结果将大于内存中较早的地址。挑剔:标准不要求指针实际上是内存地址;尽管可以说,对它们的要求意味着内存地址的模型。一致性实现也可以在指针中存储段偏移量或类似的内容。但是+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;
}