您的位置:首页 > 编程语言 > C语言/C++

zerglurker的C语言教程010——运算符详解(二)

2015-06-14 20:18 351 查看
首先,请参考上节课我们提到的运算符总览   

今天我们主要讲解下面几个运算符:

()圆括弧运算符

{}组合运算符

::作用域解析

throw运算符

,逗号运算符

()圆括弧运算符

使用示例:

a*(b+c)
(b>=a)&&(c<=a)
(a%(b/c))*d
特点说明:

1 圆括弧拥有优先执行权限。即运算表达式时,优先运算圆括弧内的表达。

2 圆括弧可以嵌套,嵌套时内部的圆括弧拥有更高的优先级。

注意:

由于()作为圆括弧运算符的时候,里面的表达式不可以为空,也不可以有多个语句,所以可以看做是一个单目运算符

虽然可以在其内部使用逗号,但是整个逗号运算表达式最后是作为一个表达式给圆括弧的

使用技巧:

圆括弧通常用来规范表达式的运算优先级,确保表达式按照开发者的预期优先级进行运算。

看过上一篇的同学们应该都有了这种共识:运算符本身的优先级并不可靠!

而圆括弧就是解决这种不可靠的唯一武器!

{}组合运算符

使用示例:

void test()
{
int a[]={0,1,2,3};
{
int a = 0;
a++;
}
}
特点说明:

1 可以用于函数实体定义、复杂数据类型定义

  复杂数据类型包括:联合体、枚举、结构体、类等等

2 可以用户数组内容初始化

  包括基本数据类型数组、复杂数据类型数组等等

3 可以构建子作用域

  子作用域内部可以重新定义变量,甚至可以无视外部作用域定义的变量

  比如示例中,我已经定义了a为数组。但是在子作用域中,我可以再次定义a为整数

  在整个子作用域中,a都将作为整数看待,而数组a则在子作用域不可见。

  同样的,子作用域定义的整数a,外部也不可见。

  再想想第8课,循环语句详解中,for和while后面的{}

  其实可以解释为对子作用域进行循环执行。这样看来for(){}其实和for()语句;是等同的

注意:由于组合运算符内部可以为空,也可以有任意多条语句。所以该运算符目数无法确定

使用技巧:

  在调试阶段,我们需要一些代码来帮助调试。这个时候我们可以将这些代码放入组合运算符内。这样里面的符号定义就不会影响外部的代码。

  避免由于添加了调试代码,引入了新的不可靠因素。

::作用域运解析算符(仅限C++)

使用示例:

std::list<int> lstTmp;
std::cin in;
::全局变量名
特点说明:

1 当引用全局变量的时候符号前面可以不用输入域名。但这并不表明符号是单目,只是隐含了一个全局域而已

2 该符号其实仅仅在编译阶段有用,实际运行的时候不会增加计算机的运算量

使用技巧:

  在多个代码模块同时开发的时候,一个比较常见的问题是,大家都碰巧定义同一个变量名、复杂数据名。

  如果要修改代码,这又太麻烦了,而且容易引入更多的错误。而这个时候使用作用域就是一个好办法。

  关于作用域、名称空间,我们后面会讲到。这里简单说明一下,这些都是为了解决同名的问题而制定的。

  这样,我只要注明这个变量或名称来自哪个作用域,就可以解决大家重名的问题。大家开发代码的时候就再也不用担心这个问题了。

throw 运算符(仅限C++)

使用示例:

if(a==0) throw 0;
特点说明:

1 该运算符将会抛出一个异常。有关异常的内容,后面会涉及,这里只是提一下

使用技巧:

1 该运算符可以抛出基本变量类型、自定义变量类型以及对象

2 该运算符必须和catch配合,否则抛出的异常会被系统捕获

,逗号运算符

使用示例:

int a = 0;
a = a + 1, a + 2, a + 3;
printf("a= a + 1, a + 2, a + 3 %d\n",a);
<pre name="code" class="cpp">        a = 0;
a = (a + 1, a + 2, a + 3);
printf("a= (a + 1, a + 2, a + 3) %d\n",a);



特点说明:

1 计算的时候,从左向右计算。注意示例,为什么第一个输出的是1,而后面一个输出的是3?因为赋值运算符的优先级更高!!

2 逗号运算符是一个双目运算,编译器不允许出现a,或者,a这样的情况

使用技巧:

1 可以在while中使用:

a = 0;
while ((a++),a < 3){
printf("a=%d\n", a);
}
注意这个循环只被执行2次,输出的是a=1 a=2

2 在for的初始化和每次循环的变化条件处理中使用

for(i=0,j=0;i<10;i++,j+=2)


待续……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息