返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C/C++堆区怎么应用
  • 943
分享到

C/C++堆区怎么应用

2023-07-04 11:07:13 943人浏览 安东尼
摘要

这篇文章主要介绍“C/C++堆区怎么应用”,在日常操作中,相信很多人在C/c++堆区怎么应用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C/C++堆区怎么应用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧

这篇文章主要介绍“C/C++堆区怎么应用”,在日常操作中,相信很多人在C/c++堆区怎么应用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C/C++堆区怎么应用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

malloc

malloc开辟堆区内存。头文件stdlib.h,函数原形如下。

void*malloc(size_tsize); //返回值void指针,该指针就是开辟的内存地址,参数是开辟的字节数。

free

free释放堆区开辟的内存。头文件stdlib.h,函数原形如下。

voidfree(void*ptr); // 参数传入需要释放的堆区内存首地址。

程序:

#include<iOStream>#include<windows.h>using namespace std;int main() {int* p = (int*)malloc(20);  //void*  malloc(size) 返回自void指针,参数是字节数for (int i = 0; i < 5; i++) {p[i] = i;//*(p+i) = i;}cout << p[1] << "  " << *(p + 1) << endl;if (p) {free(p);  // void free(heap addr)}system("pause");return 0;}

结果:

1 1

请按任意键继续. . .

C++ 中的new和delete是运算符开辟和释放堆区空间比C语言的malloc、free更高效,推荐使用。

new

返回堆区首元素的地址,可以开辟一个元素(开辟的时候可以赋值)、一维数组、二维数组。当使用new开辟二维数组的时候需要特别注意,返回的是数组指针,所以需要数组指针去接收堆区地址。

delete

delete释放堆区的时候数组需要加上[]

程序:

#include<iostream>#include<windows.h>using namespace std;int main() {int* p1 = new int(3);  // 在堆区创建一个int类型数据,并且赋初值// int* p2 = new int(0, 1, 2, 3, 4);  // 无法初始化数组int* p3 = new int[4];  // 在堆区创建数组,不赋初值int(*p4)[3] = new int[2][3];  // 在堆区创建二维数组*(p3 + 1) = 1;cout << *p1 << endl;cout << *(p3 + 1) << endl;if (p1) {delete p1;}if (p3) {delete[] p3;}if (p4) {delete[] p4;}system("pause");return 0;}

结果:

3

1 请按任意键继续. . .

memcpy

内存拷贝函数,从src源地址拷贝size字节到dest目标地址

头文件:cstring 函数原形

void*memcpy(void*dest,constvoid*src,std::size_tcount);

dest目标地址,src源地址,size拷贝的字节数

代码:

#include<iostream>#include<string>#include<windows.h>using namespace std;int main() {int num1[5] = { 0, 1, 2, 3, 4 };int* p = new int[5];memcpy(p, &num1, sizeof(num1));cout << *(p + 2) << endl;if (p) {delete[] p;}system("pause");return 0;}

结果:

2

请按任意键继续. . .

memset

用于初始化新开辟的堆区内存,从dest目标地址开始,size个字节设置成数据ch

头文件:cstring 函数原形

void*memset(void*dest,intch,std::size_tcount);

dest目标地址,ch需要设置的值,size字节数

程序:

#include<iostream>#include<windows.h>using namespace std;int main() {int* p = new int[5];memset(p, 0, 5 * sizeof(int));  // 将新开辟的的堆区数组设成0cout << *(p + 2) << endl;if (p) {delete[] p;}system("pause");return 0;}

结果:

0

请按任意键继续. . .

到此,关于“C/C++堆区怎么应用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: C/C++堆区怎么应用

本文链接: https://lsjlt.com/news/344698.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C/C++堆区怎么应用
    这篇文章主要介绍“C/C++堆区怎么应用”,在日常操作中,相信很多人在C/C++堆区怎么应用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C/C++堆区怎么应用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-07-04
  • C/C++堆区专篇精讲
    目录mallocfreenewdeletememcpymemsetmalloc malloc开辟堆区内存。头文件stdlib.h,函数原形如下。 void*malloc(size_t...
    99+
    2022-11-13
    C++堆区 C++堆区是什么
  • C语言栈、堆和静态存储区怎么使用
    本文小编为大家详细介绍“C语言栈、堆和静态存储区怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言栈、堆和静态存储区怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、程序中的栈栈是现代计算机程...
    99+
    2023-06-30
  • C语言中堆排序怎么用
    小编给大家分享一下C语言中堆排序怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、堆排序的概念 堆排序(Heapsort):利用堆积树(堆)这种数据结构所设...
    99+
    2023-06-29
  • 教你分辨C++堆与栈的区别
    目录1.程序内存分区中的堆与栈1.1 栈简介1.2 堆简介1.3 堆与栈区别2.数据结构中的堆与栈2.1 栈简介2.2 堆简介2.2.1 堆的性质2.2.2 堆的基本操作2.2.3 ...
    99+
    2024-04-02
  • C语言堆怎么实现和堆排序是什么
    这篇文章主要介绍了C语言堆怎么实现和堆排序是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言堆怎么实现和堆排序是什么文章都会有所收获,下面我们一起来看看吧。一、本章重点堆的介绍堆的接口实现堆排序二、堆2...
    99+
    2023-06-29
  • C++内存四区之代码区、全局区、栈区和堆区
    C++内存四区 C++ 在程序执行时,将内存大致分为代码区,全局区,栈区和堆区四个区域。不同的区域存储不同的数据,赋予不同的生命周期,能够更灵活地进行编程。 代码区:存放函...
    99+
    2024-04-02
  • C++对象在堆栈区的析构是怎样的
    这篇文章主要介绍“C++对象在堆栈区的析构是怎样的”,在日常操作中,相信很多人在C++对象在堆栈区的析构是怎样的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++对象在堆栈区的析构是怎样的”的疑惑有所帮助!...
    99+
    2023-06-17
  • C语言怎么用堆解决Topk问题
    这篇文章给大家分享的是有关C语言怎么用堆解决Topk问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言将详细讲解如何利用小根堆的方法解决TopK问题,这么多数据要处理,该算法时间复度居然只需TopK问题Top...
    99+
    2023-06-21
  • 详解C++内存的代码区,全局区,栈区和堆区
    目录代码区:全局区:栈区堆区总结今天无意中刷到了一篇关于c++内存的帖子,我发现那个人好像写的不太对,然后同时我自己也发现我对一块还不够了解,所以我干脆就自己去了解整理了一下:首先我...
    99+
    2024-04-02
  • C++ 内存分区模型的使用(代码区、全局区、栈区、堆区、new)
    目录内存分区模型1 代码区2 全局区3 栈区4 堆区5 new运算符参考: 内存分区模型 1 代码区 2 全局区 // 全局变量、静态变量、常量 #include &l...
    99+
    2024-04-02
  • C++怎么实现二叉树及堆
    这篇文章给大家分享的是有关C++怎么实现二叉树及堆的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1 树树是一种非线性数据结构,它是由n个有限结点组成的具有层次关系的集合。把它叫树是因为它是根朝上,叶子朝下的来上图...
    99+
    2023-06-14
  • C语言怎么实现堆及堆的结构与接口
    本文小编为大家详细介绍“C语言怎么实现堆及堆的结构与接口”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言怎么实现堆及堆的结构与接口”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、堆的结构及实现(重要)1....
    99+
    2023-06-30
  • c语言和c++怎么区别
    c++kquote>c语言和c++的主要区别在于:对象导向编程:c++支持,c不支持。数据类型:c++引入了bool、string、vector等新类型。指针:c使用直接指针,c+...
    99+
    2024-04-05
    c语言 c++
  • C++指针怎么应用
    本篇内容介绍了“C++指针怎么应用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!成员函数指针的声明一个成员函数指针包括成员函数的返回类型,后...
    99+
    2023-06-17
  • C++程序内存栈区与堆区模型案例分析
    目录栈区:栈区代码演示:堆区:堆区代码演示:new操作符:new操作符代码演示:栈区: 由编译器自动分配释放,存放函数的参数值,局部变量等(由编译器管理其“生死&rdqu...
    99+
    2024-04-02
  • C# interface编程怎么应用
    这篇文章主要介绍“C# interface编程怎么应用”,在日常操作中,相信很多人在C# interface编程怎么应用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C# interface编程怎么应用”的疑...
    99+
    2023-06-17
  • C#运算符怎么应用
    这篇文章主要讲解了“C#运算符怎么应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#运算符怎么应用”吧!点运算符用于成员访问。name1 . name2C# 操作符之 . 运算...
    99+
    2023-06-17
  • C#之System.Environment类怎么应用
    System.Environment类是C#中用于访问和操作运行时环境信息的类。它提供了一系列属性和方法,可以获取和设置与当前应用程...
    99+
    2023-09-25
    C#
  • C++回溯法怎么应用
    本文小编为大家详细介绍“C++回溯法怎么应用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++回溯法怎么应用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。回溯1实验题目:n皇后题目描述:N皇后的排列,每行一个...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作