| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1102 人关注过本帖
标题:c和指针的一道题目:
只看楼主 加入收藏
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:4 
可以用变量吧!!!
程序代码:
#include <stdio.h>
#include <assert.h>
void reverse_string(char* string)
{
    char *p, temp;
    assert(string);
    for (p = string;*(p + 1);p++);
    while (p != string && p != string - 1)
    {
        temp = *p;    *p = *string;    *string = temp;
        p--;    string++;
    }
}
int main()
{
    char test[] = "ABC";
    reverse_string(test);
    printf ("%s\n", test);
    return 0;
}


[fly]存在即是合理[/fly]
2012-12-01 13:02
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用embed_xuel在2012-12-1 09:28:47的发言:

可惜char* string 这个属于常量字符串  是不能被修改的。
这句话是题目里的还是你自己想象出来的?
不是题目的 莫非我理解错了吗

却实不能修改啊

DO IT YOURSELF !
2012-12-01 21:22
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
使用STRLEN的同学是不能通过答案的

DO IT YOURSELF !
2012-12-01 21:25
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用寒风中的细雨在2012-12-1 11:18:14的发言:

#include  
 
void reverse_string(const char* const string)
 {
     if(0 == *string)
     {
         return;
     }
     reverse_string(string+1);
     printf("%c", *string);
 }
 int main()
 {
     char *test = "ABC";
     reverse_string(test);
     printf ("\n");
     return 0;
 }
你这个把那2个const 去掉  就和题目一样了

但是string+1 我不是很理解  能讲一下吗   他指向的是哪里啊

DO IT YOURSELF !
2012-12-01 21:30
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
string+1就是递增地址
就好像*string为字符'A'
*(string+1)就是字符'A'的后面一个字符也就是字符'B’

I have not failed completely
2012-12-01 21:33
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用神龙赖了在2012-12-1 21:33:32的发言:

string+1就是递增地址
就好像*string为字符'A'
*(string+1)就是字符'A'的后面一个字符也就是字符'B’
那起步就是B 然后 C  回溯回来就是CB
那A是怎么弄出来的  
因为最后输出是CBA啊

DO IT YOURSELF !
2012-12-01 21:36
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
回复 12楼 wp231957
确实可以修改,
用数组存储然后把首地址传进去


[fly]存在即是合理[/fly]
2012-12-01 21:52
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
使用数组就有违题意了

DO IT YOURSELF !
2012-12-01 21:55
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
我的意思是把 主函数 中的 char *test = ""; 变成char test[] = "" 然后再调用reverse_string(test);那个函数不用就是了,题目又没说主函数不能用数组


[fly]存在即是合理[/fly]
2012-12-01 22:03
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
那起步就是B 然后 C  回溯回来就是CB
那A是怎么弄出来的  
因为最后输出是CBA啊
不完全正确
我们从头开始看一边:
程序代码:
void reverse_string(const char* const string)
{
     if(0 == *string)
     {
         return;
     }
     reverse_string(string+1);
     printf("%c", *string);
}
首先*string指向的是字符'A'
因为不为0,所以不运行if语句
把string+1也就是字符'B'的地址带入
....
开始逆流
输出字符'B'后还剩下最开始的带入
于是输出字符‘A’
 reverse_string(string+1);
     printf("%c", *string);
在第一次的时候带入的是string+1,也就是说最后回来还得输出*string对不对?

老夫已经尽力了....




I have not failed completely
2012-12-01 22:03
快速回复:c和指针的一道题目:
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017422 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved