C++学习之指针(2)---动态申请内存和释放和动态创建数组

2024-06-08 14:48

本文主要是介绍C++学习之指针(2)---动态申请内存和释放和动态创建数组,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

之前我们在使用指针的时候,一直使用的是野指针,然后再给这个指针指向一个确定的内存地址。
如果我们在创建指针的时候直接给指针指向一个内容为空的内存空间也是可以的,这样以后也可以把指向的内存空间给手动删除,有利于系统回收内存释放掉资源。

int* k = new int;*k = 10;cout << "测试k的值:" << *k <<endl;delete k;//删除k所指向的内存,当删除后指针k成为一个野指针,这个野指针是随便指向了一个内存位置,而不像之前提到过的未初始化的指针cout << "打印删除指针后的指针:" << k << endl;k = NULL;//NULL为一块内存,这里让指针指向了NULL这块内存cout << "打印删除指针后的指针4:" << k << endl;

打印信息如下:

测试动态申请内存空间
测试k的值:10
打印删除指针后的指针:00008123
打印删除指针后的指针4:00000000

动态创建数组

创建一维数组
如果我们正常的通过输入一个数组的长度来创建是会报错的,我们只能通过创建指针数组来动态创建数组的长度,代码示例如下:

cout << "*************测试动态创建数组***************"<<endl;int len;cout << "请输入一个数组长度:"<<endl;cin >> len;int* m = new int[len];for (size_t i = 0; i < len; i++){m[i] = i + 1;}for (size_t i = 0; i < len; i++){cout << m[i] << "\t";}

通过上边的代码,我可以发现这个指针赋值和之前提交单个数据指针赋值以及用指针获取数组的值有点不一样。这个m是一个int数组的指针。之前的m是一个数据或者数组元素的指针,之前取值使用*m,这里取值使用m[i]
创建二维数组

cout <<endl<< "*************测试动态创建二维数组数组***************" << endl;int row=1;//二维数组的行int col=1;//二维数组的列cout << "请输入二维数组的的行:" << endl;cin >> row;cout << "请输入一维数组的列数:" << endl;cin >> col;int** n = new int* [row];//创建外层数组for (size_t i = 0; i < row; i++){n[i] = new int[col];//创建内层数组for (size_t j = 0; j < col; j++){n[i][j] = i+j;}}for (size_t i = 0; i < row; i++){for (size_t j = 0; j < col; j++){cout << n[i][j] << "\t";}cout << endl;}

这篇关于C++学习之指针(2)---动态申请内存和释放和动态创建数组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1042488

相关文章

Linux内存泄露的原因排查和解决方案(内存管理方法)

《Linux内存泄露的原因排查和解决方案(内存管理方法)》文章主要介绍了运维团队在Linux处理LB服务内存暴涨、内存报警问题的过程,从发现问题、排查原因到制定解决方案,并从中学习了Linux内存管理... 目录一、问题二、排查过程三、解决方案四、内存管理方法1)linux内存寻址2)Linux分页机制3)

vue基于ElementUI动态设置表格高度的3种方法

《vue基于ElementUI动态设置表格高度的3种方法》ElementUI+vue动态设置表格高度的几种方法,抛砖引玉,还有其它方法动态设置表格高度,大家可以开动脑筋... 方法一、css + js的形式这个方法需要在表格外层设置一个div,原理是将表格的高度设置成外层div的高度,所以外层的div需要

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

Java循环创建对象内存溢出的解决方法

《Java循环创建对象内存溢出的解决方法》在Java中,如果在循环中不当地创建大量对象而不及时释放内存,很容易导致内存溢出(OutOfMemoryError),所以本文给大家介绍了Java循环创建对象... 目录问题1. 解决方案2. 示例代码2.1 原始版本(可能导致内存溢出)2.2 修改后的版本问题在

大数据小内存排序问题如何巧妙解决

《大数据小内存排序问题如何巧妙解决》文章介绍了大数据小内存排序的三种方法:数据库排序、分治法和位图法,数据库排序简单但速度慢,对设备要求高;分治法高效但实现复杂;位图法可读性差,但存储空间受限... 目录三种方法:方法概要数据库排序(http://www.chinasem.cn对数据库设备要求较高)分治法(常

SpringBoot实现动态插拔的AOP的完整案例

《SpringBoot实现动态插拔的AOP的完整案例》在现代软件开发中,面向切面编程(AOP)是一种非常重要的技术,能够有效实现日志记录、安全控制、性能监控等横切关注点的分离,在传统的AOP实现中,切... 目录引言一、AOP 概述1.1 什么是 AOP1.2 AOP 的典型应用场景1.3 为什么需要动态插

Redis多种内存淘汰策略及配置技巧分享

《Redis多种内存淘汰策略及配置技巧分享》本文介绍了Redis内存满时的淘汰机制,包括内存淘汰机制的概念,Redis提供的8种淘汰策略(如noeviction、volatile-lru等)及其适用场... 目录前言一、什么是 Redis 的内存淘汰机制?二、Redis 内存淘汰策略1. pythonnoe

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC