目录开篇醒脑
《金缕衣》
劝君莫惜金缕衣,劝君惜取少年时。
有花堪折直须折,莫待无花空折枝。
- 一、结构体的区别
- 二、动态内存申请
- 三、内存池
- 四、string类型
- 五、本章作业
- 结构体类型的声明不在需要struct关键字,直接用结构体名就行
//定义一个结构体Tihu
struct Tihu
{
int age;
}
//在这里定义变量时不再需要struct
Tihu A1;
A1.age = 18;
-
类似于命名空间,结构体当中允许函数的存在
- 类比命名空间,结构体当中也是允许函数存在的,同时,他们的定义也是可以存在于结构体里面或者结构体外面的。
- 结构体当中的函数访问数据是可以直接访问的
- 可以通过外部函数修改数据
- 结构体当中成员的调用与C语言当中结构体成员的调用方法是一致的
- 结构体类型变量.成员
- 结构体类型指针->成员
- (*结构体类型指针).成员
- 在没有写构造函数和权限限定的时候,用法和c语言的用法是一致的
struct Tihu
{
int age;
char name[20];
char* name1;
//声明写在里面,定义写到外面去
void print();
//函数的声明定义都写在里面
void printTihu()
{
cout<<"printTihu"<print();
//外部函数修改内部数据
A3->getAge() = 20;
//同时也可以定义结构体数组
Tihu A4[3];
return 0;
}
二、动态内存申请
-
c语言的几种动态内存申请
-
malloc 不带初始化的申请
指针类型 指针变量名 = (指针类型)malloc(指针指向类型的长度*总的个数); -
calloc 带初始化的申请
指针类型 指针变量名 = (指针类型)calloc(指针指向类型的个数,指针指向类型的长度);
-
realloc 在已有的内存长度后面继续申请
已有指针变量名 = (指针类型)realloc(已有指针变量名,原有内存长度加上想要再次申请内存长度的总和); -
内存释放
free(指针变量名);
-
-
C++动态内存申请
-
new为申请
-
delete为释放
delete 指针变量名(单个变量的释放)
delete[] 指针变量名(数组的释放,不需要数量) -
单个变量的申请
指针类型 指针变量名 = new 指针所指向的类型 -
数组的动态申请
指针类型 指针变量名 = new 指针所指向的类型[申请类型内存个数] -
结构体内存申请
-
Tihu* pT = new Tihu; //结构体当中的指针需要进行二次申请 pT->name1 = new chae[20]; strcpy(pT->name1,"莫大帅"); pT->age = 30; pT->print(); pT->getAge() = 32; pT->printTihu(); //申请的内存都需要释放,并且释放顺序与申请顺序应该是相反的 delete[] pT->name1; delete pT;三、内存池
- 申请一大块内存供本程序使用,在需要时在已申请的那一块内存里进行再次申请,程序结束时只需要释放最大块内存即可
//总的内存池是1024字节 char* memorySum = new char[1024]; //申请三个int类型的内存大小 //内存池内的申请方式为: //指针类型 指针变量名 = new(申请内存开始的地方) 指针所指向的类型 [个数(一个可不写)] int* pNum = new (memorySum) int[3]; //再次申请 char* pStr = new(pNum+3) char[10]; //释放 delete[] memorySum; memorySum = nullptr;四、string类型
- string类型的创建
- 不带初始化
string str1; - 带初始化
string str2 = "Tihu";
string str2(Tihu) - 通过另一个字符串创建
string str3 = str2;
string str3 (str2);
- 不带初始化
- string的基本操作
- 拷贝
- 赋值
- 连接
string str5 = str3+str2; - 比较
str3==str2;
这个比较就类似于C语言中的strcmp那个函数
- C++string和C语言string.h
这里的string是一个数据类型,直接操作的也是这个类型的自变量,而C语言里面的string.h是一个库函数,操作对象为char类型的变量,因此string类型不能使用C语言中string.h库中的函数进行操作. - string其他函数操作
- 如果想要将string类型转化为char类型,可以使用string类中的c_str函数
string str = "Tihu";
str.c_str();//这时的str就是一个char类型变量名 - 这里的string类型是没有长度限制的
- 如果想要将string类型转化为char类型,可以使用string类中的c_str函数
二维数组的动态内存申请,采用子函数的方式 为二级指针申请内存,和释放内存
#includeusing namespace std; void createArray2D(int row,int cols,int** & p) { p = new int*[row]; for(int i=0; i |
结果为:



