整型字面值
0开头为八进制
020=2*8+4=20
0x开头为十六进制
0x14=1*16+4=20
字面值的整数常量默认是int或者long
宽字符
#include<locale.h> #include<wchar.h> #include<stdlib.h> wchar_t y=L'中'; //设置属性 setlocale(LC_ALL,"chs"); wprintf(L"%lc ",L'中');
创建常量的通用格式
const type name=value;
强制转换的通用格式
typeName (value)
声明数组的通用格式
typeName arrayName[arraySize];
short months[12];
将char数组视为一组用于存储一个字符串的char存储单元
string类变量是一个表示字符串的实体
string类
strcpy()
将字符串赋值到字符数组中
strcat()
将字符串附加到字符数组末尾
struct结构体
结构标记的用法与基本类型名相同,结构声明定义了一种新类型
可以使用成员运算符( . )来访问各个成员
可以同时完成定义结构和创建结构变量的工作,只需将变量名放在结束括号的后面即可
struct perks { int key_number; char car[12]; }mr_smith,ms_jones;
共用体
共用体union是一种数据格式,能够存储不同的数据类型,但只能同时存储其中的一种类型
共用体每次只能存储一个值,因此它必须有足够的空间来存储最大的成员,所以共用体的长度为其最大成员的长度
用途之一:当数据项使用两种或更多种格式(但不会同时使用)时,可节省空间
例如:假设管理一个小商品目录,其中有一些商品的ID为整数,而另一些的ID为字符串,在这种情况下可以这样做
共用体常用于(但并非只能用于)节省内存,当前系统的内存多达数GB甚至数TB,好像没有必要节省内存,但并非所有的C++程序都是为这样的系统编写的
C++还用于嵌入式系统编程,如控制烤箱等,对这些应用来说内存非常宝贵,共用体常用于操作系统数据结构或硬件数据结构
指针和自右存储空间
计算机程序在存储数据时必须跟踪的3种基本属性
1. 信息存储在何处
2. 存储的值为多少
3. 存储的信息是什么类型
指针是一个变量,其存储的是值的地址,而不是值本身
指针名表示的是地址
manly是一个指针 manly表示的是一个地址 *manly表示存储在该地址处的值
int m=23; int *p=&m; //m和*p是一样的--->23 //&m和p是一样的--->地址
注意
int *p; 强调*p是一个int类型,C程序员使用 int* p; 强调int*是一种类型----指向int的指针,C++使用这种格式 int* p1,p2; 声明创建一个指针p1和一个int变量p2 对每个指针变量名,都需要使用一个* 在C++中,int*是一种复合类型,是指向int的指针
C++创建指针时,计算机将分配从来存储地址的内存,但不会分配用来存储指针所指向的数据内存
警告:一定要在对指针应用解除引用运算符(*)之前,将指针初始化为一个确实的,适当的地址
变量是在编译时分配的有名称的内存,而指针只是为可以通过名称直接访问的内存提供了一个别名
指针真正的用武之地在于 在运行阶段分配未命名的内存以存储值
使用new分配内存
告诉new需要为哪种数据类型分配内存;new将找到一个长度正确的内存块,并返回该内存的地址,将该地址赋给一个指针
int* pn=new int;
pn指向的内存没有名字,指向的是为数据项分配的内存块
为一个数据对象获得并制定分配内存的通用格式如下
typeName * pointer_name=new typeName;
使用delete释放内存
int * p=new int; delete p;
这将释放p指向的内存,但不会删除指针p本身
一定要配对的使用new和delete,否则会发生内存泄漏(也就是说被分配的内存再也无法使用了,如果内存泄漏严重,则程序将由于不断寻找更多的内存而终止)
引用
引用必须初始化,引用类型的初始值必须是一个对象
赋值永远改变等号左侧的对象