• 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语言运算的掌握程度啊!)

  • 相关阅读:
    SYBASE 日志空间满了的几种情况
    命令行对jar包的解压和压缩
    SYBASE 常用 sp_configure
    SYBASE 删除数据库
    【转】从RGB色转为灰度色算法
    C# 指针操作图像 细化处理
    C# 指针操作图像 二值化处理
    C# 对象转换为byte[] ,byte[]还原对象
    javascript 简单加解密
    windows 2003 企业版 下载地址+序列号
  • 原文地址:https://www.cnblogs.com/yspworld/p/4764548.html
Copyright © 2020-2023  润新知