1、数组
sizeof用于整个数组名时将得到整个数组的字节数。
初始化:double earnings[4] {}; //所有的元素都为零
unsigned int counts[10]={};
int a[]={1,3,4};
2、字符串
字符串是以空字符结尾的,空字符被些为 。
字符串常量:char bird[]=" S";(把S的地址传回去,还多一个 )
字符常量: char shirt_size='S';
拼接字符串时,第一个字符串的尾部 将被第二个字符串的字母给填充上。
strlen()计算可以看见的字符,strlen(name).
cin在读取字符串时,使用空格,制表符和换行符来确定字符串的结束位置,所以当输入the month,则cin不能一次读取,会先读出the,后来再输入时读取month。
当要读New York时,可以用面向行的,cin.getline(),丢弃换行符,保留 ,如cin.getline(name,20),读取包含20个字符的name数组。
get()会保留换行符,所以一般采用 cin.get(name,20);
cin.get();//用于读取输入name后的回车符,将缓冲队列里的回车符清除
cin.get(dessert,20);
cin.get(name,20)调用后会返回一个cin对象,故也可以cin.get(name,20).get();
cin.get(dessert,20).get(); getline()也可以这样用,效果一样
3、string类简介
string str="the month";
cin>>str;
string类合并可直接用+;赋值用=;长度用 str.size();
strcpy(a,b)把b赋值给a
strcat(a,b)把b加到a的后面 ////// 针对的是字符串!!!!
4、结构简介
struct A{
}B; //A是结构体名称,B是这种结构体类型的变量
也可以直接 (struct) A a;进行定义变量
结构体初始化inflatable duck (=) {"Daphone " , 0.12 , 9.98};
结构体变量之间也可以用=进行赋值
5、共用体
union one4all
{
int int_val;
long long_val;
double double_val;
};
每次使用只用其中一种数据类型
struct widget
{
char brand[20];
int type;
union
{
long id_num;
char id_char[20];
};
};这是匿名共用体,每次只能在id_num和id_char中选一个用
6、枚举
enum spectrum{red,orange,yellow,green,blue,violet,indigo,ultraviolet};//spectrum是新的类型名
spectrum band //band 变量的值只能在上述中选择 band=red或band=0
也可以 int band= yellow(取2)
enum bigstep{first,seconf=100,third};
first默认为0,后面没被初始化的枚举量比前面的枚举量大1。因此third值为101.
现在的枚举值可表示枚举的范围,上限是:找到比最大的枚举值大的一个最小的2的幂,将它减一,如最大值是101,则找到128-1=127.
下限:为零或者为负。找负数时,跟正数一样,最后再加上符号。
7、指针和自由存储空间
&用来获取变量的地址,*称为解除引用运算符,应用于指针,可以得到地址处存储的值。int *p_updates 则p_updates 是地址变量,*p_updates是表示一个值。
int updates=6; int higgens=5;
int *p_updates; int * pt=&higgens;//*pt=5,pt指向的是一个地址
p_updates=&updates; 因为在声明语句中初始化指针,这种情况下被初始化的是指针,而不是它指向的值,即这里是将pt进行初始化,而不是*pt。
则*p_updates=6,p_updates是一个值
int *pt;
pt=(int *)0xBB8000000;数字要转化为地址类型,加上(int *)进行强制类型转换
在程序运行时用指针分配内存空间
typedef *pointer_name=new typeName;
int *pt=new int;
当用new申请的内存,可以用delete来归还内存,并且delete不能释放变量所获得内存
int *pt=new int; delete pt;//这里只释放了pt指向的内存而没有删除指针pt本身,pt仍然可以重新指向另一个新分配的内存。
int* psome= new int[10];//分配动态数组,psome指向第一个内存块的地址
delete [] psome;//释放动态数组,一定要加[]
psome[0]=2;//可以直接像数组那样访问
8、指针、数组和指针算术
C++允许指针直接与整数进行加减。
关于使用句点运算符与箭头运算符的区别:
如果结构标识符是结构名,则使用句点运算符;如果标示符是指向结构的指针,则使用箭头运算符。另外一种,如果ps是指向结构的指针,则*ps就是被指向的值--结构本身,则可用(*ps).price。一定要加上括号!
10、数组替代品
include<vector>
vector<double > vd(n);//n可以是变量,即数组长度不固定
include<array>
array<int , 5> ai;//5是常量