C 使用指针反转字符串

C 使用指针反转字符串,c,string,C,String,我目前正在研究不同的算法来练习我的编码能力,并且遇到了一个反转字符串的算法。它使用指针,我对正在发生的事情有点困惑。代码如下: void reverse(char *str) { char * end = str; char tmp; if (str) { while (*end) { ++end; } --end; while (str < end) { tmp = *str; *str++ = *e

我目前正在研究不同的算法来练习我的编码能力,并且遇到了一个反转字符串的算法。它使用指针,我对正在发生的事情有点困惑。代码如下:

void reverse(char *str) {
   char * end = str;
   char tmp;
   if (str) {
      while (*end) {
         ++end;
      }
  --end;
  while (str < end) {
     tmp = *str;
     *str++ = *end;
     *end-- = tmp;
  }
 }
}
void反向(char*str){
char*end=str;
char-tmp;
如果(str){
while(*结束){
++结束;
}
--结束;
while(str
因此,在这段代码中,末尾被放在第一个while循环中字符串内存位置的末尾。然后第二段时间是我感到困惑的地方。我不明白*str++=*end和*end--=*temp是怎么回事


为什么会这样?当tmp=*str行出现时,字符串的第一个字母会进入temp还是我的想法不正确

如您所知,
end
指向最后一个字符。 现在在第二个for循环中,他只是将第一个字符与最后一个字符交换,然后将str指针移向其右侧,并将结束移向其左侧

while (str < end) {
     tmp = *str;  // storing the char at str in temp
     *str++ = *end;  // storing the char at end at str position and then incrementing str .. i.e. moving str right
     *end-- = tmp;  // storing the char in tmp at end position and then decrementing tmp .. i.e. moving tmp left 
  }
while(str
如您所知,
end
指向最后一个字符。 现在在第二个for循环中,他只是将第一个字符与最后一个字符交换,然后将str指针移向其右侧,并将结束移向其左侧

while (str < end) {
     tmp = *str;  // storing the char at str in temp
     *str++ = *end;  // storing the char at end at str position and then incrementing str .. i.e. moving str right
     *end-- = tmp;  // storing the char in tmp at end position and then decrementing tmp .. i.e. moving tmp left 
  }
while(str
最好尝试一个示例,下面是单词
“hello”
的第二个while循环。
*str
的值始终存储在
tmp
中,然后将
*end
复制到
*str
中,总体效果是每次迭代后,
*str
*end
的值切换。
*str
上的后增量和
*end
上的后减量在赋值语句之后才会生效

    *end
    v
hello        tmp='h'
^
*str
------------------
   *end
   v
oellh        tmp='e'
 ^
 *str
------------------
  *end
  v
olleh        tmp='e'
  ^
  *str

执行在此处停止,因为
str
生成一个假值,因为它们现在都指向同一个字符。

最好尝试一个示例,下面是单词
“hello”
的第二个while循环的样子。
*str
的值始终存储在
tmp
中,然后将
*end
复制到
*str
中,总体效果是每次迭代后,
*str
*end
的值切换。
*str
上的后增量和
*end
上的后减量在赋值语句之后才会生效

    *end
    v
hello        tmp='h'
^
*str
------------------
   *end
   v
oellh        tmp='e'
 ^
 *str
------------------
  *end
  v
olleh        tmp='e'
  ^
  *str

执行在这里停止,因为
str
生成一个假值,因为它们现在都指向同一个字符。

所以如果str是“Hello”,那么tmp将是H@user081608 Nope。。。temp本身就是“H”。temp是一个字符。。。str、end是指针。。最初str指向位置oh'H',temp将存储指向str的字符,即'H',因此如果str是“Hello”,那么tmp将是H?@user081608 Nope的位置。。。temp本身就是“H”。temp是一个字符。。。str、end是指针。。最初str指向位置oh'H',temp将存储指向be str的字符,即,'H'在
*str++=*end
行中,str值在开关后移动,因为它是str++而不是++str正确的?在
*str++=*end
行中,str值在开关后移动,因为它是str++而不是++str正确的?这可能有帮助要实现这一点,字符串的前半部分将与后半部分交换。因此,第一个字符与最后一个字符交换,然后第二个字符与下一个字符交换,以此类推,停在字符串的中间。这可能有助于实现字符串的前半部分与后半部分交换。因此,第一个字符与最后一个字符交换,然后第二个字符与下一个字符交换,依此类推,在字符串中间停止。