还应注意嵌套问题,即前面说过的else在寻找配对的if时,总是找最近的一个if,这里依旧。
long a = 0; P1: for( long i = a; i < 10; i++ ) for( long j = 0; j < 10; j++ ) { if( !( j % 3 ) ) continue; if( !( j % 7 ) ) break; if( i * j ) { a = i * j; goto P1; } // 其他语句 } | 上面的continue;执行后,将立即计算j++,而break;执行后,将退出第二个循环(即j的循环),进而执行i++,然后继续由i < 10来决定是否继续循环。当goto P1;执行时,程序跳到上面的P1处,即执行long i = a;,进而重新开始i的循环。
上面那样书写goto语句是不被推荐的,因为其破坏了循环,不符合人的思维习惯。在此只是要说明,for或while、do while等都不是循环,只是它们各自的用处最后表现出来好象是循环,实际只是程序执行位置的变化。应清楚语句的实现,这样才能清楚地了解各种语句的实际作用,进而明确他人写的代码的意思。而对于自己书写代码,了解语句的实现,将有助于进行一定的优化。但当你写出即精简又执行效率高的程序时,保持其良好的可读性是一个程序员的素养,应尽量培养自己书写可读性高的代码的习惯。
上面的long j = 0在第一个循环的循环体内,被多次执行岂不是要多次定义?这属于变量的作用域的问题,下篇将说明。
本篇的内容应该是很简单的,重点只是应该理解源代码编译成机器指令后,在执行时也放在内存中,故每条语句都对应着一个地址,而通过跳转语句即可改变程序的运行顺序。下篇将对此提出一系列的概念,并重点说明类型的意义。
|