《C语言解惑》—— 3.6 不要用错逗号运算符

    xiaoxiao2023-08-05  162

    本节书摘来自华章出版社《C语言解惑》一 书中的第3章,第3.6节,作者:刘振安 刘燕君,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

    3.6 不要用错逗号运算符

    原设计下面的程序输出“2,000”,结果给出一个奇怪的数字。

    #include <stdio.h> void main() { int a; printf("%d\n",a=(2,000)); a=2,000; printf("%d\n",a); }

    输出结果如下。02即使错误,两个表达式的结果也应该一样啊?为何第1次输出是“0”,第2次是“2”呢?仔细分析一下,发现数字的表示错误,不能用日常的计数分隔符“,”。C语言恰巧有逗号运算符,从而造成输出怪异。为何“a=(2,000)”不等于“ a=2,000”呢?逗号表达式的一般形式如下所示。表达式1,表达式2逗号表达式的求解过程是:先求解表达式1,再求解表达式2。整个表达式的值是表达式2的值。假设逗号表达式为a=24,a3先求解a=24,得a的值为8,然后求解a3,得24。整个表达式的值为24。注意:表达式的值为24,但a的值是8。不要搞混表达式的值和变量的值。以此可以推出对于表达式a=(2,000);而言,应先求逗号表达式2,000的值,这个表达式的值是0,然后再将这个表达式的值赋给变量a,第1个输出语句输出的是表达式的值0。对于表达式a=2,000;而言,是先把2赋给a,形成表达式a,000这个表达式的值是0,而a 的值是2。所以第2条语句输出的是2。【例3.12】分析下面程序的输出。

    #include <stdio.h> void main() { int a[]={1,3,5,7,9}; int b[2][2]={{1,2},{3,4}}; printf( "%d\n",a[1,2]); printf("%d\n",b[1][1]); printf("%d\n",b[2,1]); printf("%d\n",b[1]); }

    【分析】按照逗号运算符,a[1,2]就是a[2],内容为5。b1表示的是行列式的第2行第2列,内容为4。b[2,1]使用逗号运算符,结果也是b[1],b[1]代表存储第2行元素的首地址,“%d”?是使用十进制输出这个地址值,所以最后两条语句的输出是一样的,即5412450281245028【例3.13】下面这个程序有没有错误?错在哪里?

    #include <stdio.h> void main() { int i,j,sum; i=12,j=15,sum=0; printf("%d %d\n",i,j); for(i=1,j=1;i<=10;i++,j++) sum=sum+i+10*j; printf("%d %d %d\n",i,j,sum); }

    语句

    int i=12,j=15,sum=0;

    是对的,语句

    i=12,j=15,sum=0;

    的写法也是对的,这里逗号的作用与语句

    i=12;j=15;sum=0;

    的效果相同。同理,for语句也是标准的使用方法,程序没有错误,输出结果为12 1511 11 605

    相关资源:敏捷开发V1.0.pptx
    最新回复(0)