科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件C++程序设计从零开始之语句 (5)

C++程序设计从零开始之语句 (5)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

C++程序设计从零开始之语句

作者:chuiyun 来源:BLOG 2007年10月28日

关键字: 设计 C++ Linux

  • 评论
  • 分享微博
  • 分享邮件

上面虽然看起来很复杂,但依旧是一个单句,应该注意当写了一个“else”时,编译器向上寻找最近的一个“if”以和其匹配,因此上面的“else”是和“if( a < 10 )”匹配的,而不是由于上面那样的缩进书写而和“if( a )”匹配,因此b *= a;只有在a大于等于10的时候才执行,而不是想象的a为零的时候。

还应注意前面书写的if( a ) long c;。这里的意思并不是如果a非零,就定义变量c,这里涉及到作用域的问题,将在下篇说明。
switch 这个语句的定义或多或少地是因为实现的原因而不是和“if else”一样由于逻辑的原因。先来看它的格式:switch(<整型数字>)<语句>。

上面的<整型数字>和if语句一样,只要是一个数字就可以了,但不同地必须是整型数字(后面说明原因)。然后其后的<语句>与前相同,只要是语句就可以。在<语句>中,应该使用这样的形式:case <整型常数1>:。它在它所对应的位置定义了一个标号,即前面goto语句使用的东西,表示如果<整型数字>和<整型常数1>相等,程序就跳转到“case <整型常数1>:”所标识的位置,否则接着执行后续的语句。

long a, b = 3;
switch( a + 3 )
case 2: case 3: a++;
b *= a;

上面就表示如果a + 3等于2或3,就跳到a++;的地址,进而执行a++,否则接着执行后面的语句b *= a;。这看起来很荒谬,有什么用?一条语句当然没意义,为了能够标识多条语句,必须使用复合语句,即如下:

long a, b = 3;
switch( a + 3 )
{
 b = 0;
 case 2:
  a++; // 假设地址为3003
 case 3:
  a--; // 假设地址为3004
  break;
 case 1:
  a *= a; // 假设地址为3006
}
b *= a; // 假设地址为3010

应该注意上面的“2:”、“3:”、“1:”在这里看着都是整型的数字,但实际应该把它们理解为标号。因此,上面检查a + 3的值,如果等于1,就跳到“1:”标识的地址,即3006;如果为2,则跳转到3003的地方执行代码;如果为3,则跳到3004的位置继续执行。而上面的break;语句是特定的,其放在switch后接的语句中表示打断,使程序跳转到switch以后,对于上面就是3010以执行b *= a;。即还可如此:

switch( a ) if( a ) break;

由于是跳到相应位置,因此如果a为-1,则将执行a++;,然后执行a--;,再执行break;而跳到3010地址处执行b *= a;。并且,上面的b = 0;将永远不会被执行。

查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章