hu_66666 2021-12-04 02:53 采纳率: 75%
浏览 20
已结题

函数部分第一次循环之后,进行第二次的时候, t[i]不是从t[0]开始的嘛?为什么输出来时倒序的?而且指针变量*p不是指向s[0]?为什么还要 p-- ?


#include <stdio.h>
#define MAXS 20

void f( char *p );
void ReadString( char *s ); /* 由裁判实现,略去不表 */

int main()
{
    char s[MAXS];

    gets(s);
    f(s);
    printf("%s\n", s);

    return 0;
}

/* 你的代码将被嵌在这里 */
void f( char *p ){
//本题大概想考察对于指针的了解
//*p其实就是一个地址值,这个地址里存放着一个字符常量
//所以就有了*p=s[0] 的道理
//我的思路就是先把字符串里的东西都先存在一个空白字符串里
//然后再倒赋给*p 
    char t[MAXS];
    int i,j,k,h;

    for (i = 0;*p != '\0';*p++,i++){
        t[i]=*p;
        h=i;
    }
//这里要注意,循环出来的时候 
//*p指向的是'\0' ,所以要把地址值减去
//变成字符串的最后一个字符 
//不然倒赋 会失败 
    *p--;
    t[i]='\0';
//h是最大下标 
    for (i = 0;i <= h;i++,*p--){
        *p=t[i];
    }
    
} 

展开全部

  • 写回答

1条回答 默认 最新

  • 南城Flipped 2021-12-04 03:02
    关注

    第一次循环的时候 *p++这个条件使得p的指向指在了字符串末尾位置为h,第二次循环 *p--不就是指向从h位置变到0了吗

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    hu_66666 2021-12-04 03:06

    明白了!!!

    回复
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 12月11日
  • 已采纳回答 12月4日
  • 创建了问题 12月4日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部