简单语句
所谓语句,就相当于自然语言中的句子,是c++的一个编译单位。一个语句中可以只有一个操作,如“i++”,也可以有好多操作,如“da+b+c”,其中有赋值,又有几个加法。几个语句也可以组成条件控制和循环控制的语句结构,因此语句就只是一个单位而已,我们不要用固定思维来看他。
空语句
c++中大多数的语句都以分号(;)结尾,而前面空无一物的分号也可以称为空语句(null),空语句在编译中会被当成一个语句,但他并没有什么作用。最常见的空语句就是for循环的头部定义的三个语句,在看到for循环的省略形式时就会看到括号内单独的分号,这就是空语句。
一般情况 空语句不会造成什么问题,示例:
#include<iostream>
using namespace std;
//空语句
int main()
{
//单行空语句
;
//普通语句后多一个分号 ;
cout << "好好学习!" << endl; ;
return 0;
}
这两种展现的空语句,都是正常的情况,但有时空语句也会造成一些问题
#include<iostream>
using namespace std;
//复合语句中的空语句
int main()
{
int a=1;
//if条件后不小心写了分号,直接终结了这个条件语句
if ( a == 2 );
cout << "好好学习!" << endl;
return 0;
}
复合语句后面加了一个分号,这个语句会被解读成空语句,而这个条件语句则将这个空语句当成条件成立后会执行的语句,所以,这里尽管a不等于2,但“好好学习!”还是会被打印。
作用域和块
现实中,凡事都有自己的适用范围,计算机语言中,变量也都有自己的作用域(Scope),所谓作用域,就是变量的可见范围,在某个作用域中定义了变量之后,我们可以使用、访问这个变量,但是出了这个作用域之后我们就无法使用这个变量了,
程序的作用域是自顶向下定义的,在最上级首先由一个全局作用域(Global Scope),全局作用域的变量可以在文件中的所有地方被访问,他也叫做全局变量(Global Variable),而其他非全局变量就叫做局部变量(Local Variable);而在其下,我们会用( {} )定义一个个的块( Block ),每个块都定义了一个层的作用域,而块中又能嵌套块,于是就有了层级的作用域结构。
基本作用域示例:
#include<iostream>
using namespace std;
//全局变量
int num = 3 ; //全局变量 num
int main()
{
cout << "num的值为:" <<num << endl;
int num = 2 ; //局部变量num
cout << "num的值为:" << num <<endl;
return 0;
}
输出结果为:
示例中,我们先声明了一个全局变量 num= 3,并在main函数中打印,而当我们在main函数中声明另一个同名局部变量后,打印出来的局部变量就变成了局部变量的2,可以说局部变量的生命周期是从定义到所在代码结束的这段代码,而内层的局部变量会屏蔽外层的同名变量,函数虽然不完全是一种块,但在代码分析中一般级别会高于块,我们也可以将花括号当中的内容看成块,而其中定义的也是局部变量。
除了函数自带的定义域外,我们也可以用{} 来自己定义一个块
#include<iostream>
using namespace std;
//
//块与作用域
int main()
{
int layer = 1 ;
cout << "layer的值为:" << layer << endl;
{
cout << "layer的值为:" << layer << endl;
int layer = 2 ;
cout << "layer的值为:" << layer << endl;
{
cout << "layer的值为:" << layer << endl;
int layer = 3 ;
cout << "layer的值为:" << layer << endl;
}
cout << "layer的值为:" << layer << endl;
{
cout << "layer的值为:" << layer << endl;
int layer = 3 ;
cout << "layer的值为:" << layer << endl;
}
cout << "layer的值为:" << layer << endl;
}
cout << "layer的值为:" << layer << endl;
return 0 ;
}
输出结果为:
通过观察某一行输出语句打印的layer的值,我们可以看到在不同块中声明的同名变量的影响范围,以及在块有嵌套的时候只有最里面的变量是可见的。
简单语句与复合语句
c++中大多数的语句都是简单语句,简单语句基本都以分号结尾。而为了实现条件控制和循环控制等功能,我们也需要借助复合语句。复合语句与其说是语句,不如说是结构化的代码块,一般都有一个或数个特殊组成部分,当中穿插着语句或块。
示例:
#include <iostream>
using namespace std;
//复合语句
int main()
{
int a = 1 + 2 ; //简单语句
//复合语句
if (a == 3)
a = 2;
else
a = 3;
return 0 ;
}
可以看到,复合语句是不可分割的整体,它不像两个以分号结尾的语句那样可以拆开之后分别放在两个地方,其中的els以及后面的一个语句都不能离开if部分而单独存在。
如果本文对你有帮助请点赞支持一下下~