no_russion 2019-02-15 03:35 采纳率: 25%
浏览 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 04: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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    喜欢数学的女孩の 2021-03-23 12:53

    感谢!

    回复
编辑
预览

报告相同问题?

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

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

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

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

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

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

客服 返回
顶部