hu_66666 2021-12-04 10: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 11:02
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月12日
  • 已采纳回答 12月4日
  • 创建了问题 12月4日

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器