数组(type x[])
-
int a[2]; a[1] = 1; a[2] = 2;
-
int a[2] = {1, 2 }
-
int a[] = {1 ,2 ,3, 5}
字符串(string)
-
char a[3] = { 'a', 'b', '\0'}; // \0 字符串的结尾 默认
-
char a[3] = "ab"; // 需要时刻注意字符串多出一个位置给'\0'
-
char a[] = "abcdef"; // 长度自适应分配
-
字符输入
-
cin.getline()
-
cin.get().get() cin.get() 代表读取新的一行(即运行新行输入)
-
-
字符串 -- #include<cstring>
-
string a = "dhjkashfkf";
-
strcpy(a,b) //字符复制
-
strcat(a,b) // 字符拼接
-
结构体(struct)
需要注意结构体的定义有效范围
-
若定义在function内部则有效范围为该函数内
-
若定义在main() 函数外 也就是定义在头文件下面 则可以多个函数使用该类型
struct inflatable{
char name[20];
int a;
string b;};
//声明
inflatable oneStruct ={
"NooneDo",
13,
"LoveYourself"};
//访问内容
oneStruct.name //oneStruct.a oneStruct.b
//你也可以声明结构化数组访问
inflatable listStruct[10] // 10个结构体
//访问,比如:
listStruct[2].a
共用体(union)
不怎么常用的类型,与strcut类型但不同,它每次值可以存储一个数据
union oneUnion{
int a;
short b;
double c;};
oneUnion x;
x.a = 4;
cout << x.a <<endl;
x.b = 2 ;
cout << x.b <<endl;
cout << x.a <<endl; // print 2 x.a = 4 is lost
枚举(enum)
枚举类型默认为int,如果没有指定的值,则会从0开始给值依次+1
enum oneEnum { a, b, c, d, e} ; // Default int, assigned from 0
cout << a << b << c << endl; //012
oneEnum f;
f = a; // you can let f = a //one of {a,b,c,d,e}
// f cann not = 12 or a+b because the type of a,...c is int, but f is enum
f = oneEnum(15); // you can perfrom type conversion
// otherwise, you can specify the value the corresponding variable
enum oneOtherEnum { aa=1, bb=100, cc=13, dd=14, ee=15} ;
cout << aa << bb << cc << endl; //110013
指针(& and *)
经典困难部分({{{(>_<)}}})
首先你需要明确一定指针本质也是一个变量,但是其存储的是值的存储地址而不是某个值。
-
& --- 取地址运算符号 (我已经习惯称之为取地址符号 另外一种也叫(引用)) * ----取值运算符 (间接取值 解除引用)
-
一定需要注意的是---------声明了一个指针,一定需要其赋值(指向)
int a = 3; //声明一个a
int * p; // 定义一个指针
p = &a ; //指向 a的地址
//那么 *p == a 就是拿到a地址的中值
*p += 1 ;
cout << *p << endl; //4
a += 1;
cout << a << endl; //4
/***
* 即 int a = 3;
* int * p = &a;
* 使得 a 与 *p 两个变量等价
***/
/*
* 如果执行初始化 int a = 3; int * p = &a ;
* 你可以理解为:
* 先将 a的地址&a赋值给 p 然后 p中内容存储为 3;
* 即 *(p = &a) 先执行内部
* int a = 3;
* cout << *(&a) <<endl; 输出 3
*/
内存分配(new)
-
new 可以为你找到一个你需要的数据类型的地址,并指向;返回该内存的地址
-
typeName * pointer_name = new typeName;
int * p = new int; //new 一个int的对象
*p = 8;
cout << p <<endl; // 地址
cout << *p <<endl; // 数值 8
内存释放(delete)
-
使用指针new对象以后,记得释放
-
但是delete只能释放new创建的指针
int * p = new int; //new 一个int的对象
*p = 8;
// cout << p <<endl; // 地址
// cout << *p <<endl; // 数值 -8
delete p;
// int a = 8;
// int * q = &a;
// delete q; // 已经赋值的指针,无法执行delete
int * qp;
delete qp; // 空指针可以被delete删除,可以执行delete
新建\\删除动态数组
-
typeName * pointer_name = new typeName [n];
int * p = new int [3]; //new 一个int [] 的对象
*p = 1, *(p+1) = 2, *(p+2)=3; // 第一种方式进行赋值 p+1 可以认为地址向前移动一个int单元
cout<< p[2] <<endl; // 3
p[0] = 4, p[1] = 5, p[2] = 6; // 第二钟方式允许 我们直接与数据一致的方式进行赋值
cout<< p[2] <<endl; // 6
delete [] p ; // 删除动态数组对象