提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录- 前言
- 一、动态内存分配
- 二结构体
- 三、string类型
- 总结
前言
最近开始学习c++,这是我这段时间学习的知识与心得希望可以帮助也在努力学习C++的你,内容都是个人的理解有什么不对的地方还望指出
提示:以下是本篇文章正文内容,下面案例可供参考
一、动态内存分配
在c语言中动态内存分配通常会使用 malloc 、calloc与realloc,free;malloc是分配内存一个内存可用常量改变的内存给一个指针,calloc是malloc在基础上作了初始化,realloc可调节calloc与malloc所分配的内存的大小;free释放分配的内存
但是它们在使用是往往又存在很多不方便的地方,例如它们分配的内存大小的单位是字节,这就导致了很多时候还需要使用sizoef来说辅助,但还是很容易搞错;记得有一次我想动态内存分配一个二维数组,但是总是出现指针越界的情况,经过了多番查找才发现是我给指向数组的指针只分配了一个字节,可想而知一个四个字节的东西我给了一个字节的空间;
所以就有了c++的新语法“new”,这个语法的出现彻底的方便了分配动态内存;来看代码
int main()
{
int* p = new int;//这样就分配好了
int* pe = new int[3];//分配数组
delete p;//释放内存 、
delepe [] pe;//释放数组不管是多少维的数组都是这样释放,这两种写法可以让你看得出释放的是数组还是常量;
}
注意这样分配的内存都是没有初始化的;不过放心new还提供了可以初始化的操作来看代码:
int main()
{
int* p = new int(15);
int* pe = new int[3]{ {1},{2} };//一旦初始化了数组的一个值其他没有初始化,那么其他值就默认为0;
}
是不是觉得new比malloc好用多了,反正我一接触到new后就没摸过malloc了;
new还有一个功能可以使用别人内存,在c++中一般在使用内存池的时候使用
什么是内存池:就是允许大家申请一段内存,共给程序使用,综合管理内存;举个例子:例如小明、小红、小芳三个人一起卖了块地十年,小芳种水稻,小明种大麦,小红种水果,虽然种东西不同但都是在同一块地里,土地到期了也是一起都要背赶走;就是一块内存不同的数组或变量用;怎么用呢来看代码
int main()
{
char* MANT = new char[1024];//总内存
int* p = new(MANT) int(15);
int* pe = new(MANT+4) int[3]{ {1},{2} };
//也可以int* pe = new(p+1) int[3]{ {1},{2} };想在使用那一块就输入那的收地址即可;注:从始至终都只申请了一块内存MANT
}
这里就讲完了“new”了还值得注意的是malloc 内存是在堆区 ,new 内存是自由存储区;
二、结构体
1.创建结构体时不在需要书写struct 例:
struct MM
{
int u;
};
int main()
{
MM p;
}
2.c++的结构体类型是可以允许函数存在的可以在结构体内定义也可以在结构体外定义 , 另外结构体中函数访问同一个结构体中的数据,是可以直接访问的
代码如下(在结构体外定义函数):
struct MM
{
int u=10;
void A();
};
void MM::A()//在结构体外需要加 “结构体::”,在结构体内定义时不用
{
cout << u;
}
int main()
{
MM p;
p.A();
}
该处使用的url网络请求的数据。
三、string类型
可以说c++中的string是个妥妥的黑科技 ,可以说是·一个升级版的char*类型,但不是升级了一点两点,可以说是究极进化了;
首先来看初始化基本和普通数组没什么两样
int main()
{
//两种初始化方式
string p = "happle";
string pa;
pa = "holle";
}
接下来就是黑科技了我们来看 拷贝、连接、比较
int main()
{
string p = "happle";
p = "hhhhh";//拷贝
string pa;
pa = "holle";
if (pa != p)//比较
{
pa = pa + p;//连接
}
}
没错就是这么直接不需要调函数就是直接操作;当然sting内型还不止这些操作还有太多了这里就不说了感兴趣的可以去看看微软的官方文档;
总结这里就是我最近学习的新知识,有说的不对的地方还望指出,加油把送给更我一样在努力学习编靓仔靓女;



