A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

char *strrev(char *str)  
{  
    if(str==NULL)  
        return NULL;  
    char *start=str;  
    char *end=str+strlen(str)-1;  
    char temp;  
    while(start<end)  
    {  
        temp=*start;  
        *start=*end;  
        *end=temp;  
        start++;  
        end--;  
    }  
    return str;  
}  

4 个回复

正序浏览
应该是字符串后面的字符提到前面,前面放后面?
回复 使用道具 举报
通过这个图,我们看到,程序定义了两个指针,分别指向传入字符串的开头和结尾。然后看while循环体里面,将头尾进行了置换,然后头指针向尾部挪动一下,尾指针向头部挪动一下,而while的成立条件是,头指针和尾指针没有相遇。

解释.png (54.6 KB, 下载次数: 24)

解释.png
回复 使用道具 举报
错了。。上面char temp 不用赋0.  当成int型了。。。
回复 使用道具 举报
char *strrev(char *str)  
{  
    if(str==NULL)  
        return NULL;    //这个传入的参数是空返回空,这个函数到这里就结束了  
    char *start=str;    //把传入参数的首地址给 start(开始)
    char *end=str+strlen(str)-1;   //把传入参数的尾地址给 end(结束),strlen函数返回的长度不包括\0
                                                 如:传如abcd 那尾地址就是a+3,所以strlen返回是4要减1.
    char temp;   //交换值要先声明一个同类型的变量,如果直接赋值0就更好了。
    while(start<end)      
    {  
        temp=*start;       //两个值互换  end最后一个字符串的值换到了第一个。
        *start=*end;  
        *end=temp;  
        start++;             //换完一次就要移到下一个地址
        end--;               //同上
    }  
    return str;     //这个返回的是传入字符串倒序的。如:abcd  返回dcba;
}  
  我是这么理解的   如果不对请大神说明。。。谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马