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

原文地址:https://www.cnblogs.com/yspworld/p/4764548.html