no_russion
2019-02-15 11:35
采纳率: 67.7%
浏览 701

宏定义的小问题,为什么输出是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条回答 默认 最新

  • blownewbee 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

    点赞 2 评论

相关推荐 更多相似问题