1.C++结构体
1.1C++结构体中是允许函数的存在 ,该函数体可以在结构体内定义,也可以在结构体外定义
#includeusing namespace std; struct fox {//数据成员,属性,特征 int age; char name[20]; //函数成员,方法 void printdata() { cout< 1.2
结构体的数据访问必须通过结构体变量(结构体指针)进行访问
C++结构体中的函数访问属性,可以直接访问
#includeusing namespace std; struct fox {//数据成员,属性,特征 int age; char name[20]; //函数成员,方法 void print() { cout << name << "t" age = 3; p->print(); } 1.3 在C++中struct 声明了类型之后,定义结构体变量的时候 可以省略关键字struct
所以上面的代码 可以去掉strcut 如下图所示
int main() { fox foxone = { 18,"狐狸" }; foxone.print();//这个就是直接访问 它可以直接访问foxone 这个结构体里面的数据 fox* p = &foxone; p->printData();//通过结构体指针去操作 p->age = 3; p->print(); }2.动态内存的申请与释放
和C语言的动态内存概念基本没有差距,无非关键字变成了new,释放变成delete
语法是 new 要申请的类型 [大小];
int main() { char str2[20] = "Iloveyou"; char* str = new char[20];//申请char 20字节 strcpy_s(str,20,str2); cout << str << endl; }释放也是一样的
int main() { char str2[20] = "Iloveyou"; char* str = new char[20]; strcpy_s(str,20,str2); cout << str << endl; //delete str;上下两种写法效果是一样的 delete[]str; str = nullptr; }delete 和delete [ ] 效果是等效的,只是为了增加代码的可读写,有方括号,代表释放是连续的一段内存段
记住一点 申请之后 释放顺序是反过来的
2.1 内存池 (顾名思义我申请一段大内存,我需要的的时候从这个内存池中分配出来)
在C语言里面malloc 申请是堆区内存,C++ new是自由存储区
int main() { char* memorySum = new char[1024];//我申请一个很大的内存 double* pnum = new(memorySum) double[3];//我从memorySum申请double数据*3,我可以区使用它了 pnum[1] = 1.0; pnum[0] = 0.0; pnum[2] = 2.0;//正常使用 cout << pnum[0] <<"t"<< pnum[1] <<"t"<< pnum[2] << endl; char* name = new(memorySum + 24) char[9];//中间加号看不懂,建议了解指针的偏移 strcpy_s(name,9,"ILOVEyou"); cout << name << endl;//我提前申请了一个大的内存,在需要进行分配 //因为共用一段内存 ,释放头部就好了 delete[]memorySum; memorySum = nullptr; }3.string 类型
C++string 包含头头文件是
//注意不是C语言的 string 基本操作 拷贝 赋值 链接 比较
string 创建,初始化,不带初始化,字符串创建;
#include#include using namespace std; int main() { string str;//创建不带初始化 string str1 = "Iloveyou";//带初始化 string str2 = str1;//字符串创建 str = str2; //赋值操作; //str基本操作 // 拷贝+赋值+ 连接+ 比较 if (str==str2) //str可以直接比较 链接 赋值 { cout << "相等" << endl; } str = str1 + str2;//连接 cout << str << endl; //最重要的点是 //str类型字符串中没有记录 的位置,不要越界访问 string str4 = "12345";//按照C语言中 这里的长度算上 标记应该为下标0~5 也就是长度为6 //但是str没有记录 要注意不要超出下标越界访问 cout << str4 << endl; } 有一个问题:
str4下标【5】里面是应该有一个 吗? 我多次打印下标5中的内容,未出现报错处理
还望老师解答一下



