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\n", s[0]); printf("s[1]=%d\n", s[1]); printf("s[2]=%d\n", s[2]); printf("s[3]=%d\n", s[3]); printf("a = %d\n\n\n", a); a=1; memset(s, 0, sizeof(s)); s[a++]=++a;
printf("s[0]=%d\n", s[0]); printf("s[1]=%d\n", s[1]); printf("s[2]=%d\n", s[2]); printf("s[3]=%d\n", s[3]); printf("a = %d\n\n\n", a); a=1; memset(s, 0, sizeof(s)); s[++a]=a++; printf("s[0]=%d\n", s[0]); printf("s[1]=%d\n", s[1]); printf("s[2]=%d\n", s[2]); printf("s[3]=%d\n", s[3]); printf("a = %d\n\n\n", a); a=1; memset(s, 0, sizeof(s)); s[++a]=++a; printf("s[0]=%d\n", s[0]); printf("s[1]=%d\n", s[1]); printf("s[2]=%d\n", s[2]); printf("s[3]=%d\n", s[3]); printf("a = %d\n\n", 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语言运算的掌握程度啊!)