yuchu3d 2021-10-10 13:22 采纳率: 80%
浏览 25
已结题

C语言中,字符数组ch[0]++的问题

学习C语言中,遇到一个问题,请看程序:程序就是 用循环输出26个小写字母;
程序1:

#include<stdio.h>
int main(void)
{
    
    char ch[26];
    int i;
    
    ch[0]='a';
    for(i=0;i<26;i++)
    {
    ch[i]=ch[0]++;
    printf("%4c\t",ch[i]);
    }
    
    return 0;
}

注意这里用的是ch[0]++
输出的结果是:

img

这个结果是有问题的, 前面应该是 a b , 结果是 a a . 但是 我没看出错在哪里?

程序2:

#include<stdio.h>
int main(void)
{
    
    char c,ch[26];
    int i;
    
    c='a';
    for(i=0;i<26;i++)
    {
    ch[i]=c++;
    printf("%4c\t",ch[i]);
    }
    
    return 0;
}

这个输出结果 是没问题的,如下:

img

为什么会这样呢?
ch[i]=ch[0]++;
printf("%4c\t",ch[i]); 这样写 到底错在哪里呢?

谢谢 赐教!

  • 写回答

1条回答 默认 最新

  • yuchu3d 2021-10-11 09:56
    关注

    这个就像当于 x=x++ 的问题 如果有这个语句 for(n=0,x=0; n<20;n++) x=x++; 那么x 一直都是0,这是因为 先运行 x++这个式子,其结果为0,将该结果存在一个位置,比如tem , 然后x的值递增1,最后将tem里存贮的值0 赋予X, 这样x又变回了0.

    本问题中 在于 ch[0] = ch[0]时 原地踏步了一次, 所以后面就有了两个a.

    评论

报告相同问题?

问题事件

  • 系统已结题 10月18日
  • 创建了问题 10月10日

悬赏问题

  • ¥15 C++ 句柄后台鼠标拖动如何实现
  • ¥15 有人会SIRIUS 5.8.0这个软件吗
  • ¥30 comsol仿真等离激元
  • ¥15 静电纺丝煅烧后如何得到柔性纤维
  • ¥15 (标签-react native|关键词-镜像源)
  • ¥100 照片生成3D人脸视频
  • ¥15 伪装视频时长问题修改MP4的时长问题,
  • ¥15 JETSON NANO
  • ¥15 VS开发qt时如何在paintgl函数中用pushbutton控制切换纹理
  • ¥20 关于 openpyxl 处理excel文件地问题