当前位置:网站首页 > C++编程 > 正文

c++单向链表(c++单向链表的创建与操作)



大家好,我是苏貝,本篇博客带大家了解C++的内存管理,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️
在这里插入图片描述


在这里插入图片描述

【说明】

  1. 栈又叫堆栈–非静态局部变量/函数参数/返回值等等,栈是向下增长的。
  2. 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信。堆用于程序运行时动态内存分配,堆是可以向上增长的。
  3. 数据段–存储全局数据和静态数据。
  4. 代码段–可执行的代码/只读常量

我们先来看下面的一段代码和相关问题

在这里插入图片描述

问:

在这里插入图片描述

前5个(从左到右):CCCAA
全局变量和static变量放在(数据段)静态区(前3个)
局部变量放在栈区(第四个)
Num1是局部的数组,它的值是首元素地址,局部数组在栈区


后5个(从左到右):AAADAB

前2个:char2是局部的数组,它的值是首元素地址,局部数组在栈区。”abcd”在常量区,实际上是”abcd0”。将”abcd0”赋值给数组,是将常量区的”abcd0”赋值一份到栈区,再让数组指向栈区的“abcd0”(看下图)。char2的值是首元素地址,*char2就是首元素a,在栈区。

在这里插入图片描述

问:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. malloc/calloc/realloc的区别
    malloc开辟的空间不会初始化。calloc开辟的空间会将每个字节初始化为0。realloc可以调整开辟空间的大小(不初始化为0),调大空间:原地扩容(后面有足够空间)或者异地扩容(后面无足够空间,另外找一个足够的连续空间)。
  2. 这里需要free(p2)吗?
    不用,如果要异地扩容,那么realloc会自动free掉p2指向的空间。如果是原地扩容,free(p3)即可。

C语言内存管理方式在C++中可以继续使用,但有些地方就无能为力,而且使用起来比较麻烦,因此C++又提出了自己的内存管理方式:通过new和delete操作符进行动态内存管理。

在这里插入图片描述

new 类型后面没有接[类型个数],默认申请1个该类型的空间

申请和释放单个元素的空间,使用new和delete操作符,申请和释放连续的空间,使用 new[ ]和delete[ ],注意:匹配起来使用。

所以new和malloc的区别在哪里?

  1. 用法上更简洁,如上
  2. 可以控制初始化
    在这里插入图片描述

给多个连续的元素初始化,如果初始值的个数少于元素的个数,那么没有初始值的元素就被初始化为0

  1. 在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数,而malloc与 free不会。

在这里插入图片描述

  1. new失败后会抛异常,不需要我们手动检查

C
在这里插入图片描述
在这里插入图片描述

C++

在这里插入图片描述
在这里插入图片描述


好了,那么本篇博客就到此结束了,如果你觉得本篇博客对你有些帮助,可以给个大大的赞👍吗,感谢看到这里,我们下篇博客见❤️

到此这篇c++单向链表(c++单向链表的创建与操作)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • console线(usb转console线)2025-11-23 14:18:11
  • xp虚拟机安卓版(xp虚拟机 -- bochs.apk)2025-11-23 14:18:11
  • plc1ms定时器(plc定时器的)2025-11-23 14:18:11
  • cmake多级目录(cmake添加目录下所有的文件)2025-11-23 14:18:11
  • msvcp100.dll文件被占用(msvcp140.dll文件被占用)2025-11-23 14:18:11
  • cnn是哪个国家的新闻媒体(cnn是哪个国家的新闻媒体抖音闪退)2025-11-23 14:18:11
  • apc和安乃近哪个好(apc与安乃近哪个副作用大)2025-11-23 14:18:11
  • plc1200编程软件都要下什么软件(plc1200用什么软件编程)2025-11-23 14:18:11
  • plc 下位组件错误(plc下位组件错误怎么回事)2025-11-23 14:18:11
  • tcp工具安卓版(tcp工具包)2025-11-23 14:18:11
  • 全屏图片