zoukankan      html  css  js  c++  java
  • 用反汇编理解puchar()、getchar()、EOF

    关于putchar()看图即可理解
     
    getchar()接收的是字符
    比如
     
    int c;
    c = getchar();
    此时你输入的东西,getchar都认为它是字符
    就算你输入1,getchar接收的是'1'
    但getchar()返回的是int整型
     
    int c;
    c = getchar();
    printf("%d", c);
     
    int c;
    c = getchar();
    putchar();
    此时的putchar() = printf("%c " ,c)
    关于EOF,我现在也是大理解,就把他当成#define EOF -1 理解就好
     
    下面给一段代码
    int main()
    {
    
           long nc;
    
           nc = 0;
           while (getchar() != EOF)
                  ++nc;
           printf("%ld
    ", nc);
    
           system("pause");
           return 0;
    }
    解释下整个逻辑:
    首先,定义一个长整型nc,并给他赋予初始值0
    现在来写一个循环,整个循环的条件是,只要getchar() != EOF 就执行循环体
    比如,我们输入A,getchar()其实返回的是其对应的ASCII码(int整型)65,
    自然是不等于EOF(-1)的,那么就执行整个循环体, ++nc ,也就是nc = nc + 1 = 0 + 1 = 1;
    只要我们不停地在getchar()里传入数据,他就会不断地执行
    我们刚刚输入了A,也就是65,执行循环体,nc = nc + 1 = 0 + 1 = 1;
    再继续输入B,也就是66,执行循环体,nc = nc + 1 = 1 + 1 = 2;
    再继续输入C,也就是67,执行循环体,nc = nc + 1 = 2 + 1 = 3;
    我们要退出循环要Ctrl+Z,但这个操作也算是操作符,具体是多少可以自己test下
    执行循环体 nc = nc + 1 = 3 + 1 = 4;
    最后的结果是4.
     
    执行结果表明我上面的说法是错误的,为了了解到底怎么回事,我特意OD了下
    1.执行到了getchar那,我们来输入A  // 

     
  • 相关阅读:
    转:Asp.net Mvc4默认权限详细(上)
    UITableViewCell点击不能push解决方法
    Sublime Text3学习参考集
    Mac搭建学习PHP环境
    Xcode里如何修改类的名字
    Xib中设置控件的圆角、边框效果
    MarkDown的使用
    iOS UItextView监听输入特定字符跳转页面选择选项返回
    创建podspec文件,为自己的项目添加pod支持
    iOS单例模式
  • 原文地址:https://www.cnblogs.com/EvilAnne/p/9435160.html
Copyright © 2011-2022 走看看