常用的算术类型包括:bool,char,int,long,long long,float,double。
其中,char字符最小占有8位,int整型最小占16位,long长整型最小占有32位,float单精度浮点数占有32位,double双精度浮点数占有64位。
除去bool型和扩展字符型,其他的整型可以划分带符号和无符号两种。
变量提供一个具名的,可供程序操作的存储空间。
变量声明:一个文件如果想使用别处定义的名字则必须包含对那个名字的声明。
extern int i;//声明而非定义i
变量定义:负责创建与名字关联的实体,还可以申请存储空间,赋初始值。
int i;//声明并定义i
变量有且只能被定义一次,但可以被多次声明。
两种常用的复合类型:引用和指针。
定义:为对象起了另一个名字,引用类型引用另一个类型。
通常表示形式:&d :
int ival=1024;
int &refVal=ival;
引用即别名,而非对象。
使用取地址符(&)获取指针存放某个对象的地址:
int ival=42;
int *p=&ival;//p存放变量ival的地址,或者说p是指向变量ival的指针
指针的值(即地址)应属于下列4种状态之一:
使用解引符(*)来访问该对象:
int ival=42;
int *p=&ival;
cout<<*p;
解引用操作只适用于指向某个对象的有效指针。
空指针(null pointer)不指向任何对象。
初始化示例:
int *p1=nullptr;
int *p2=0;
//需要#include cstdlib
int *p3=NULL;
引用:一旦定义,不可修改;
指针:给指针赋值就是令它存放一个新的地址,从而指向一个新的对象;
void* 是一种特殊的指针类型,可用于存放任意对象的地址。
允许把指针的地址再存放到另一个指针当中。
示例:
int ival=1024;
int *pi=&ival;// pi指向一个int型的数
int **ppi=π// ppi指向一个int型的指针
不能
定义指向引用的指针;存在
对指针的引用;示例:
int i=42;
int *p;
int *&r=p;// r是一个对指针p的引用
把引用绑定到const对象上,称为对常量的引用
。
同时,对常量的引用不能被用作修改它所绑定的对象。
const int ci=1024;
const int &rl=ci;
对const的引用可能引用一个并非const的对象。
指针常量
int * const p //指针常量
常量指针
const int *p = &a; //常量指针
const int ci=42;//不能改变cide值,这是一个顶层const
const int &p2=&ci;//允许改变p2的值,这是一个底层const
常量表达式(const expression)是指值不会改变并且在编译过程就能得到计算结果的表达式。
声明为constexpr的变量是哟个常量,而且必须用常量表达式初始化。
constexpr int mf=20;
constexpr int limit=mf+1;//mf+1 是常量表达式
const int *p=nullptr;//p是一个指向整型常量的指针
constexpr int *q=nullptr;//q是一个指向整数的常量指针
与其他常量指针类似,constexpr 指针既可以指向常量也可以指向一个非常量。
类型别名可以让复杂的类型名字变得简单明了,易于使用。
传统方式:使用typedef关键字
typedef double wages;
typedef wages base, *p;
新方式:使用别名声明来定义
using SI=Scale_item;
指针、常量和类型别名
typedef char *pstring;
const pstring cstr=0;//cstr是指向char的常量指针
const pstring *ps;//ps是一个指针,他的对象是指向char的常量指针;
auto是让编译器根据初始值来判断变量的类型,所以必须有初始值。
decltype类型的作用是选择并返回操作数的数据类型。
const int ci=0,&cj=ci;
decltype(ci) x=0;//x类型是 const int
decltype(cj) y=x;//y的类型是 const int& ,y绑定到变量x;
struct Sales_data{
std::string bookNo;
unsigned units_sold=0;
double revenue=0.0;
}