学习一门新的程序设计语言得到最好方法就是练习编写程序!
算术类型:
/*
整型:包括字符和布尔类型,bool、char、wchar_t、char16_t、char32_t、short、int、long、long long
浮点型:float、double、long double
*/
类型转换:类型所能表示的值的范围决定了转换的过程。
字面值常量:
/*
整型:20
浮点型:3.14159
字符:'a'
字符串:"Hello World"
转义序列:/n
*/
变量
变量定义基本形式:首先是类型说明符,随后紧跟由一个或多个变量名组成的列表,其中变量名以逗号分隔,最后以分号结束。
int sum, value;
初始化:当对象在创建时获得了一个特定的值,就说这个对象被初始化了。初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值来替代。
double price = 109.99;
列表初始化:用花括号来初始化变量的形式被称为列表初始化。
int units_sold = 0;
int units_sold = {0};
int units_sold(0);
int units_sold{0};
标识符:由字母、数字和下划线组成,其中必须以字母或下划线开头;标识符长度没有限制,但对大小写字母敏感。
int somename, someName, SomeName, SOMENAME;//定义了4个不同的int 变量
作用域:是程序的一部分,在其中名字有其特定的含义,C++语言中大多数作用域都以花括号分隔;同一个名字在不同的作用域可能指向不同的实体;名字的有效区域始于名字的声明语句,以声明语句所在的作用域末端为结束。主要分成全局作用域和块作用域。
复合类型:指基于其他类型定义的类型,主要有引用和指针。
引用(reference):
为对象起了另外一个名字,引用类型引用另外一种类型。通过将声明符写成&d的形式来定义引用类型,其中d是申明的变量名。
引用必须初始化;
引用即别名;
int ival = 1024;
int &refVal = ival;
int &refVal2; //报错:引用必须被初始化
允许在一条语句中定义多个引用,其中每个引用标识符都必须以符号&开头。
int i = 1024, i2 = 2048; //i和i2都是int
int &r = i, r2 = i2;//r是一个引用,与i绑定在一起,r2是int
int i3 = 1024, &ri= i3; //i3是int, ri是一个引用,与i3绑定在一起
int &r3 = i3, &r4 = i2; //r3和r4都是引用
指针(pointer):
是“指向(point to)”另外一种类型的复合类型,与引用类似,指针也实现了对其他对象的间接访问;指针与引用相比有很多的不同点,其一,指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内他可以先后指向几个不同的对象;其二,指针无须在定义时赋初值。
和其他内置类型一样,在块作用域内定义的指针如果没有被初始化,也将拥有一个不确定的值。
定义指针类型的方法将声明符写成*d的形式,其中d是变量名,如果在一条语句中定义了几个指针的变量,每个变量前面都必须有符号*。
int *ip1, *ip2;//ip1和ip2都是指向int型对象得到指针
double dp, *dp2; //dp2是指向double型对象的指针,dp是double型对象
获取对象的地址:指针存放某个对象的地址,要想获取该地址,需要使用取地址符(操作符&)。
double dval;
double *pd = &dval; //初始值是double型对象的地址
double *pd2 = pd; //初始值是指向double对象的指针
空指针(null pointer):
不指向任何对象,在试图使用一个指针之前代码可以首先检查它是否为空。
建议初始化所有指针。
int *p1 = nullptr;
int *p2 = 0;
int *p3 = NULL; //需要首先#include cstdlib
void*指针:
是一种特殊的指针类型,可用于存放任意对象的地址,一个void*指针存放着一个地址,这一点和其他指针类似;不同的是,对该地址中到底是个申明类型的对象并不了解。
void*指针能做的事情比较有限:拿它和别的指针比较、作为函数的输入或输出、或赋给另外一个void*指针;不能直接操作void*指针所指向的对象。
double obj = 3.14, *pd = &obj;
void *pv = &obj;
pv = pd;
指向指针的指针:
指针是内存中的对象,像其他对象一样也有自己的地址,因此允许把指针的地址再存放到另一个指针当中。
int ival = 1024;
int *pi = &ival;//pi指向一个int型的数
int **ppi = π//ppi指向一个int型的指针
指向指针的引用:
引用本身不是一个对象,因此不能定义指向引用的指针;但指针是对象,所以存在对指针的引用。
int i = 42;
int *p;//p是一个int型指针
int *&r = p;//r是一个对指针p的引用
来由:希望定义这样一种变量,它的值不能被改变,所以可以用关键字const对变量的类型加以限定。
const int bufsize = 512;
任何试图为bufsize赋值的行为都将引发错误,因为const对象一旦创建后其值就不能再改变,所以const对象必须初始化。
const int i = get_size();
const int j = 42;
const int k;//错误,k是一个未经过初始化的常量
初始化和const
只能在const类型的对象上执行不改变其内容的操作;
默认状态下,const对象仅在文件内有效,解决办法就是对于const变量不管是声明还是定义都添加extern关键字。
const引用
把引用绑定到const对象上,称之为对常量的引用。
const int ci = 1024;
const int &ri = ci;//正确,引用及其对应的对象都是常量
r1 = 42; //错误,r1是对常量的引用
int &r2 = ci; //错误,试图让一个非常量引用指向一个常量对象
【=========================================待更新=============2023.7.31========================】
特性 | 解释 |
long long 类型 | |
列表初始化 | |
nullptr常量 |
C++ Primer(第5版).