no_russion 2019-02-15 11:35 采纳率: 33.3%
浏览 736
已采纳

宏定义的小问题,为什么输出是D

最后一行s[++i],不应该是s【1】吗,应该输出B,为什么会输出D呢

#include<stdio.h>
#include<stdlib.h>
#define TOUPPER(c) ('a'<=(c)&&(c)<='z'?(c)-'a'+'A':(c))

void main()
{
char s[5];
strcpy(s, "abcd");
int i = 0;
putchar(TOUPPER(s[++i]));
} 
  • 写回答

1条回答

  • threenewbee 2019-02-15 12:04
    关注

    这个道理很简单,因为宏只是机械的文本替换,每次遇到c都会替换成s[++i]
    而你的表达式出现了好几次c,所以最后相当于
    putchar(('a'<=(s[++i])&&(s[++i])<='z'?(s[++i])-'a'+'A':(s[++i])));

    #include<stdio.h>
    #include<stdlib.h>
    #define TOUPPER(c) ('a'<=(c)&&(c)<='z'?(c)-'a'+'A':(c))
    
    int main()
    {
    char s[5];
    strcpy(s, "abcd");
    int i = 0;
    char ch = s[++i];
    putchar(TOUPPER(ch));
    } 
    
    

    这样就是b

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

报告相同问题?

悬赏问题

  • ¥15 vc6.0中想运行代码的时候总是提示无法打开文件是怎么回事
  • ¥25 关于##爬虫##的问题,如何解决?:
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型
  • ¥50 buildozer打包kivy app失败
  • ¥30 在vs2022里运行python代码
  • ¥15 不同尺寸货物如何寻找合适的包装箱型谱
  • ¥15 求解 yolo算法问题