<C++ Primer >学习笔记 第二章 变量和基本类型 (上)

<C++ Primer >学习笔记 第二章 变量和基本类型 (上),第1张

<C++ Primer >学习笔记 第二章 变量和基本类型 (上) 写在前面

第二章主要是在介绍一些基本的数据类型,它们的意义以及我们能够在上面完成的 *** 作。在这一章中比较难理解的是复合类型和限定符const,在后面使用的时候也是比较容易出现混淆的。
基本内置类型
算术类型
C++基本内置类型分为两类,整形和浮点型

类型含义最小尺寸bool布尔未定义char字符8位w_char宽字符16位char_16Unicode16位char_32Unicode32位short短整型16位int整形16位long长整型32位long long长整型64位float单精度浮点数6位有效数字double双精度浮点数10位有效数字long double拓展精度浮点数10位有效数字

1.布尔型的取值是真(true)或者假(false)
2.一个char大小和一个机器字节一样
3.Unicode 是用于表示所有自然语言中的字符的标准
大多数计算机以2的整数次幂个比特作为块来处理内存,可寻址的最小内存称为字节,存储的基本单元称为字,它通常由几个字节组成。
在C++语言中int,long,long long,short都属于整形,区别在于他们所占用的内存大小不同。整形还可以分为有符号型和无符号型,有符号可以表示正负数,无符号只能表示正数。float和double分别是单精度和双精度浮点数,区别主要在于在内存中所占用的比特数不同。

类型转换
将对象从一种给定的类型转换成另一种相关类型。
之后会具体的去讨论这个问题,在这里特别提醒大家在同一个表达式中不要混合使用无符号整型和有符号整型,在计算前有符号类型会被转换成无符号类型,当带符号类型取值为负时,就会出现异常结果。
字面值常量
字面值常量的具体定义见书P35-P38,这里没有什么好记录的。
练习2.8 请利用转义字符编写一段程序,要求先输出2M然后转到新的一行。修改程序使其输出2,然后输出制表符,在输出M,然后转到新的一行

#include
int main()
{
	std::cout<<"2x4d12"<<"2tMn"; //12和n都是换行
	return 0;
 } 

变量
变量提供一个具名的可供程序使用的存储空间。数据类型决定变量所占空间和排布方式,在C++中,变量和对象的概念可以互换。
初始化的含义:在变量创建时给一个初值;
赋值的含义:把对象当前值擦除用一个新的值来代替;
列表初始化:用花括号来初始化变量。(C++11新增内容,之后会后面章节会具体介绍);
默认初始化:定义在任何函数外面的变量都会被初始化为0,定义在函数体内部的内置变量不被初始化;
几种常见的变量初始化错误 *** 作
练习2.9

(a)std::cin>>int input_value;
错误,输入运算符右侧需要一个明确的变量名称,而非定义变量的语句
改正后
int input_value;
std::cin< 

定义与声明
定义:规定了变量的类型和名字,负责创建名字关联的实体,申请相关的储存空间;
声明:规定了变量的类型和名字,使名字为程序所知,一个文件如果想使用别处定义的名字则必须包含对那个名字的声明。
定义只能由一次,但是声明可以有很多次,也就是说我们只需要在一个文件中定义,其他文件需要使用声明就可以完成。
变量命名规范
变量名一般用小写
用户自己定义变量用大写开头
作用域
书p43-45

复合类型

引用和指针都是间接访问对象的一直方式。
引用
引用本身不是对象,引用是为对象起的另一个名字(别名)使用&d来定义,必须进行初始化,相当于将引用和初始值绑定在一起。引用一个对象后所有的 *** 作结果都是作用在与之绑定的对象身上的,不能绑定结果(数字这类的字面值)

引用与解引用
解引用 *** 作符是*d;
引用是引用对象变量的地址,解引用是返回地址变量;

指针
本身就是对象,因此在指针生命周期中允许指针的赋值与拷贝,可以指向不同的对象,使用*d来定义,一般伴随指针的还有取地址符&
一般在定义指针的时候是

int d=100;
int *p=&d;
这句话的含义是定义了一个指针p指向变量d,也可以说是把d的地址给了p;

下面这段话非常重要
对这句话我再讲清楚一些,d是一个变量,他能够开辟一个存储空间,这个存储空间里会存值,现在存的是100,而p作为一个指针本身是一个对象,有自己的存储空间,这个存储空间也会存值,而存的这个值就是d的地址,因此p指针指向d变量。
还有一种情况也可以完成刚才那两行代码

int d=100;
int *p;
p=&d;

很多小伙伴的疑问在这里,为什么int *p=&d,有个 * 号而下面赋值中p=&d没有 * 号但是最后都是p指向d,因为第一个语句赋值是在定义中,这个 * 号是为了定义p是个指针。因此如果不是定义语句,*p的意思是读取指向对象的内容。

*和&辨析
在引用和解引用,指针和取地址中都存在这两个符号,那么怎么判断*是解引用还是指针标识符呢?
如果&在声明中出现,那么就是引用,如果是在表达式中定义,那么就是取地址。你也可以浅显的理解为,在等号的左边就是引用,在等号的右边就是取地址。*也是同理的,在等号的左边是在定义指针,在等号的右边是解引用

**空指针 **
不指向任何对象,空指针的初始化方式
int *p=nullptr;
int *p=0;
int *p=NULL

*void指针是一种特殊类型的指针,可用于存放任意对象的地址
练习2.18 编写代码分别更改指针的值和指针所指对象的值

#include
main()
{
	int i=10,j=100;
	int *p;
	p=&i;
	std::cout<					
										


					

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5592968.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存