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

简介:

本节书摘来自华章出版社《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);
}

输出结果如下。
0
2
即使错误,两个表达式的结果也应该一样啊?为何第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”?是使用十进制输出这个地址值,所以最后两条语句的输出是一样的,即
5
4
1245028
1245028
【例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 15
11 11 605

相关文章
|
14天前
|
存储 C语言 C++
【c语言】运算符汇总(万字解析)
今天博主跟大家分享了c语言中各种操作符的功能、使用方法以及优先级和结合性,并且与大家深入探讨了表达式求值的两个重要规则--算数转换和整形提升。学习这些知识对我们的C语言和C++学习都有着极大的帮助。
68 2
|
27天前
|
C语言
c语言运算符
C的运算符有以下几种: 算术运算符:+、-、*、/、% 结合方向自左向右 关系运算符:>、<、==、>=、<=、!= 逻辑运算符:!、&&、|| 位运算符<<、>>、~、|、^、& 赋值运算符:=及符号扩展赋值运算符(+=、-=、*=、/=) 条件运算符:? : 逗号运算符:, 指针运算符:*、& 求字节运算符:sizeof 强制类型转换运算符:((类型)) 分量运算符:.、-> 下标运算符:[]
31 4
|
4月前
|
存储 C语言
C语言数据类型、变量和运算符以及printf相关问题
C语言数据类型、变量和运算符以及printf相关问题
|
10天前
|
C语言
【C语言】条件运算符详解 - 《 A ? B : C 》
条件运算符(也称为三元运算符)是C语言中唯一的三元运算符。它通常用于替代简单的 `if-else` 语句。
45 6
|
3月前
|
C语言
C语言判断和运算符联系
在 C 语言中,判断与运算符紧密相关,主要体现在条件表达式的使用上。
197 87
|
3月前
|
安全 C语言
C语言运算符的使用注意点
在C语言中,正确使用运算符能提升代码的可读性和效率。本文介绍了八大注意事项:运算符优先级和结合性影响运算顺序;自增/自减运算符分前缀和后缀形式;逻辑运算符有短路特性;位运算符直接操作二进制位需谨慎;条件运算符简洁但避免复杂嵌套;类型转换避免意外结果;使用括号明确运算顺序。掌握这些要点有助于编写更安全高效的代码。
203 72
|
2月前
|
存储 Java C语言
【一步一步了解Java系列】:了解Java与C语言的运算符的“大同小异”
【一步一步了解Java系列】:了解Java与C语言的运算符的“大同小异”
42 3
|
6月前
|
存储 C语言
【C语言刷题系列】对数字添加逗号
【C语言刷题系列】对数字添加逗号
|
2月前
|
C语言
C语言条件运算符详解
C语言条件运算符,也称为三元运算符,是一种简化if-else语句的表达式,形式为:条件?表达式1:表达式2。当条件为真时,计算并返回表达式1的值;否则计算并返回表达式2的值。它可用于快速实现简单的条件分支逻辑。
|
3月前
|
安全 C语言
在C语言中,正确使用运算符能提升代码的可读性和效率
在C语言中,运算符的使用需要注意优先级、结合性、自增自减的形式、逻辑运算的短路特性、位运算的类型、条件运算的可读性、类型转换以及使用括号来明确运算顺序。掌握这些注意事项可以帮助编写出更安全和高效的代码。
56 4