• C语言一个细节地方的说明【防止使用不当而出错】


    1.运行如下的代码:

    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
        int a;
        a=1;
        int s[4]; memset(s, 0, sizeof(s));
        s[a++]=a++;
        printf("s[0]=%d
    ", s[0]);
        printf("s[1]=%d
    ", s[1]);
        printf("s[2]=%d
    ", s[2]);
        printf("s[3]=%d
    ", s[3]);
        printf("a = %d
    
    
    ", a);
    
        a=1; memset(s, 0, sizeof(s));
        s[a++]=++a;
    printf("s[0]=%d ", s[0]); printf("s[1]=%d ", s[1]); printf("s[2]=%d ", s[2]); printf("s[3]=%d ", s[3]); printf("a = %d ", a); a=1; memset(s, 0, sizeof(s)); s[++a]=a++; printf("s[0]=%d ", s[0]); printf("s[1]=%d ", s[1]); printf("s[2]=%d ", s[2]); printf("s[3]=%d ", s[3]); printf("a = %d ", a); a=1; memset(s, 0, sizeof(s)); s[++a]=++a; printf("s[0]=%d ", s[0]); printf("s[1]=%d ", s[1]); printf("s[2]=%d ", s[2]); printf("s[3]=%d ", s[3]); printf("a = %d ", a); return 0; }

     输出结果为:

    s[0]=0
    s[1]=1
    s[2]=0
    s[3]=0
    a = 3

    说明:a=1; s[a++]=a++;

           a++会先使用a的值,再进行计算。先进行了这样的赋值s[1]=1;  然后又进行了两次a++的运算,所以a=3。

    s[0]=0
    s[1]=0
    s[2]=2
    s[3]=0
    a = 3

    说明:a=1; s[a++]=++a;

            先进行一次++a, a=2。然后进行了s[2]=2; 再进行一次a++,最后还是a=3。


    s[0]=0
    s[1]=0
    s[2]=2
    s[3]=0
    a = 3

    说明:a=1; s[++a]=a++;
            先进行一次++a, a=2。 再进行s[2]=2;  最后进行a++, 最后a=3;
    s[0]=0
    s[1]=0
    s[2]=0
    s[3]=3
    a = 3

    说明: 先进行两次++a, a=3;  再进行s[3]=3; 

    总结:在上面的这种带增量运算的式子中,在进行赋值运算前,先把所有的++x;的这种运算做完,保存好此时的变量值。在进行赋值运算。

    赋值运算做完后,再进行x++;的这种增量运算式子。 这样就可以解释上面的所有运行结果了。

    (PS:完全可以用上面的代码的运行结果来考察一个人对C语言运算的掌握程度啊!)

  • 相关阅读:
    什么是 Hystrix?它如何实现容错?
    什么是 Spring Cloud Bus?我们需要它吗?
    SpringBoot和SpringCloud的区别?
    Eureka和zookeeper都可以提供服务注册与发现的功能,请说说两个的区别?
    REST 和RPC对比?
    XML技术的作用?
    iHTML 的 form 提交之前如何验证数值文本框的内容全部为数字
    XML常用解析API有哪几种?
    XML的解析方式有哪几种?有什么区别?
    XML文档约束有哪几种?有什么区别?
  • 原文地址:https://www.cnblogs.com/yspworld/p/4764548.html
Copyright © 2020-2023  润新知