c++入门 简单语句 空语句 作用域和块 复合语句

简单语句

所谓语句,就相当于自然语言中的句子,是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部分而单独存在。

如果本文对你有帮助请点赞支持一下下~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值