#if 1
#include<stdlib.h>
#include<iostream>
using namespace std;
char* Reverse(char* s)
{
//将q指向字符串最后一个字符
char* q = s ;
int j=0;
while( *q++ )
{
j++;
}
cout<<j<<endl;
q-=2;//为何要减去2?
//分配空间,存储逆序后的字符串。
char* p = new char[sizeof(char) * (q - s + 2)] ;
char* r = p ;
// 逆序存储
while(q >= s)
*p++ = *q-- ;
*p = '\0' ;
return r ;
}
int main()
{char *m="1234567";
char *n=Reverse(m);
cout<<n<<endl;
system("pause");
return 0;
代码运行无问题,功能已实现了逆序。但是调试的时候发现while中居然有两次空格,请求帮忙解答。
没看懂你要问啥?至于指针q为何减2,是因为while(*q++)循环后,q指针后移了一位,并且要去掉 '\0’的位置故q还得减1,即q-2。
当q指向'0'时,还要执行一次++,然后while循环结束
*q++ ==> 取 a=*q , 再 q+=1 , 然后返回 a 的值. 这个是 指针加1
也就是1234567这个字符串
1 2 3 4 5 6 7 ‘\0
地址1 地址2 地址3 地址4 地址5 地址6 地址7 地址8 地址9
当值为7的时候,地址已经指向地址8了,当值为\0结束while循环的时候,地址已经指向地址9了,为了指向地址7,就要地址减2