• 20180315 代码错题(4)


    有以下程序

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #include <stdio. h>
    int fun( intA )
    {
        int b = 0;
        static int c = 3;
        a = ( c + +,b + + );
        return ( a );
    }
    main( )
    {
        int a = 2,i,k;
        for( i = 0;i<2;i + + )
            k = fun( a + + );
        printf("%d ",k );
    }

    程序的输出结果是?

    4
    0
    1
    2

    答案 B

    fun函数返回的a值和传入的a值无关,每次循环得到的k值和上一次循环也无关,所以直接看最后一次循环结果就好。
    结果的关键在于逗号表达式 a=(c++,b++); 看了大家的解析,想要提一点,以下两个表达式结果是不同的:
    1. a=(表达式1,表达式2);
    2. a=表达式1,表达式2;
    因为逗号运算符在所有运算符中优先级最低,所以表达式(2)实际上执行过程为 (a=表达式1),表达式2; 所以这道题中:
    1. 若 a=(c++,b++); 则a=0,因为逗号表达式为(c++,b++),这个表达式的结果是0,并将这个结果赋值给a;
    2. 若 a=c++,b++; 则a=4,因为逗号表达式为(a=c++,b++),这个表达式结果为0,但赋给a的值是自加前的c值;
    下面简单讲下逗号表达式是什么鬼:
    逗号表达式的形式就是用逗号运算符将若干个表达式分隔开,形如:
    表达式1,表达式2,......,表达式n
    它是一个整体,所以上式其实是(表达式1,表达式2,......,表达式n ),运算过程为从左往右逐个表达式计算,整个表达式结果是表达式n的结果。
  • 相关阅读:
    C# IP地址字符串和数值转换
    Xstream序列化实体
    异步线程及同步控制
    XML序列化与反序列化(转)
    C# Webserice 代理生成工具(WSDL)
    ASP.NET(C#)图片加文字、图片水印(转)
    异步导致UI句柄增加的解决办法
    终于找到WinForm自定义控件不能拖到IDE设计器容器的办法
    C# PropertyGrid控件应用心得(转载)
    GDI_图片半透明效果示例
  • 原文地址:https://www.cnblogs.com/kxzh/p/8574865.html
Copyright © 2020-2023  润新知