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

相关文章

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

Java数组初始化的五种方式

《Java数组初始化的五种方式》数组是Java中最基础且常用的数据结构之一,其初始化方式多样且各具特点,本文详细讲解Java数组初始化的五种方式,分析其适用场景、优劣势对比及注意事项,帮助避免常见陷阱... 目录1. 静态初始化:简洁但固定代码示例核心特点适用场景注意事项2. 动态初始化:灵活但需手动管理代

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

go 指针接收者和值接收者的区别小结

《go指针接收者和值接收者的区别小结》在Go语言中,值接收者和指针接收者是方法定义中的两种接收者类型,本文主要介绍了go指针接收者和值接收者的区别小结,文中通过示例代码介绍的非常详细,需要的朋友们下... 目录go 指针接收者和值接收者的区别易错点辨析go 指针接收者和值接收者的区别指针接收者和值接收者的

在Spring Boot中浅尝内存泄漏的实战记录

《在SpringBoot中浅尝内存泄漏的实战记录》本文给大家分享在SpringBoot中浅尝内存泄漏的实战记录,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录使用静态集合持有对象引用,阻止GC回收关键点:可执行代码:验证:1,运行程序(启动时添加JVM参数限制堆大小):2,访问 htt

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL

C++ vector的常见用法超详细讲解

《C++vector的常见用法超详细讲解》:本文主要介绍C++vector的常见用法,包括C++中vector容器的定义、初始化方法、访问元素、常用函数及其时间复杂度,通过代码介绍的非常详细,... 目录1、vector的定义2、vector常用初始化方法1、使编程用花括号直接赋值2、使用圆括号赋值3、ve