《C++ Primer》学习笔记2.2

例题

知识点

一、
类型说明符随后紧跟由一个或多个变量名组成的列表,其中变量名以逗号分隔,最好以分号结束。列表中每个1变量名的类型都有类型说明符指定,定义时还可以为一个或多个变量赋初值。

二、
对象是指一块能储存数据并具有某种类型的内存空间;把命名了的对象叫做变量;对象指能被程序修改的数据,而值指只读的数据。

三、
初始化和赋值是两个完全不同的操作。初始化的含义是创建变量时赋予其一个初始值;而赋值的含义是把对象的当前值擦除,而以一个新值来代替。

四、
使用花括号来初始化变量的形式被称为列表初始化,如果我们使用列表初始化且初始值存在丢失信息的风险,则编译器将报错。

五、
如果定义变量时没有指定初始值,则变量默认初始化。定义与任何函数体之外的变量被初始化为0;定义在函数体内部的内置类型变量将不被初始化。一个未被初始化的内置类型变量的值是未定义的,如果试图拷贝或以其他形式访问此类值将引发错误。

六、
如果想声明一个变量而非定义它,就在变量名前添加关键字extern,而且不要显式地初始化变量。我们能给extern关键字标记的变量赋一个初始值,但是这么做也就抵消了extern的作用。

七、
在函数体内部,如果试图初始化一个由extern关键字标记的变量,将引发错误。

八、
变量的定义必须出现在且只能出现在一个文件中,而其他用到该变量的文件必须对其进行声明,却绝对不能重复定义。

九、
C++的标识符由字母、数字和下划线组成,其中必须以字母或下划线开头。标识符的长度没有限制,但是对大小写字母敏感。用户自定义的标识符中不能连续出现两个下划线,也不能以下划线紧连大写字母开头。此外,定义在函数体外的标识符不能以下划线开头。

十、
作用域是程序的一部分,在其中名字有其特定的含义。
名字main定义于所有花括号之外,它和其他大多数定义在函数体之外的名字一样拥有全局作用域 。从声明变量开始到该变量所在函数结束为止都可以访问它,此变量拥有块作用域

十一、
作用域能彼此包含,被包含(或者说被嵌套)的作用域称为内层作用域,包含着别的作用域的作用域称为外层作用域。

十二、
允许在内层作用域中重新定义外层作用域已有的名字,此时应该注意变量的有效范围。

练习题

在这里插入图片描述
2.2.1节练习

练习2.9:

解释下列定义的含义。对于非法的定义,请说明错在何处并将其改正。
(a)std::cin >> int input_value;
(b)int i = { 3.14 };
(c)double salary = wage = 9999.99;
(d)int i = 3.14;

(a)std::cin >> int input_value; 非法,输入运算符的右侧对象不合法 (b)int i = { 3.14 }; 非法,使用double类型的值初始化int变量时可能丢失数据,所以编译器拒绝了此类初始化请求 (c)double salary = wage
= 9999.99; 非法,在类型说明符后紧跟的多个变量名组成的列表需要使用逗号分隔。 (d)int i = 3.14; 合法,把3.14成功转化为3,并赋值给i

练习2.10:

下列变量的初值分别是什么?

std::string global_str;
int global_int;
int main()
{
	int local_int;
	std::string local_str;
}
std::string global_str;		// 初始化为空字符串
int global_int;				// 初始化为0
int main()
{
	int local_int;			// 不被初始化
	std::string local_str;	// 不被初始化
}

在这里插入图片描述
2.2.2节练习

练习2.11:

指出下面的语句是声明还是定义:
(a)extern int ix = 1024;
(b)int iy;
(C)extern int iz;

(a)extern int ix = 1024;
声明并且定义,因为赋值操作抵消了extern的作用。
(b)int iy;
声明并且定义
(C)extern int iz;
声明而非定义。
在这里插入图片描述
2.2.3节练习
练习2.12:请指出下面的名字中哪些是非法的?
(a)int double = 3.14;
(b)int _;
(c)int catch-22;
(d)int 1_or_2 = 1;
(e)double Double = 3.14;

(a)int double = 3.14;
合法
(b)int _;
合法
(c)int catch-22;
非法,C++的标识符由字母、数字和下划线组成,没有减号。
(d)int 1_or_2 = 1;
非法,C++的标识符必须以字母或下划线开头,数字不能作为开头。
(e)double Double = 3.14;
合法
在这里插入图片描述
2.2.4节练习

练习2.13:

下面程序中j的值是多少?

int i = 42;
int main()
{
	int i = 100;
	int j = i;
}

在这里插入图片描述
j=100,局部变量i定义之后,此时局部变量i正在作用域内,因此j的值用的是局部变量i。

练习2.14:

下面的程序合法吗?如果合法,它将输出什么?

int i = 100, sum = 0;
for (int i = 0; i != 10; ++i)
	sum += i;
std::cout << i << " " << sum << std::endl;

在这里插入图片描述
输出时的i为第一次定义的i=100,在循环程序中的i为循环定义时的i=0。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值