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

相关文章

Windows下C++使用SQLitede的操作过程

《Windows下C++使用SQLitede的操作过程》本文介绍了Windows下C++使用SQLite的安装配置、CppSQLite库封装优势、核心功能(如数据库连接、事务管理)、跨平台支持及性能优... 目录Windows下C++使用SQLite1、安装2、代码示例CppSQLite:C++轻松操作SQ

C++中RAII资源获取即初始化

《C++中RAII资源获取即初始化》RAII通过构造/析构自动管理资源生命周期,确保安全释放,本文就来介绍一下C++中的RAII技术及其应用,具有一定的参考价值,感兴趣的可以了解一下... 目录一、核心原理与机制二、标准库中的RAII实现三、自定义RAII类设计原则四、常见应用场景1. 内存管理2. 文件操

C++中零拷贝的多种实现方式

《C++中零拷贝的多种实现方式》本文主要介绍了C++中零拷贝的实现示例,旨在在减少数据在内存中的不必要复制,从而提高程序性能、降低内存使用并减少CPU消耗,零拷贝技术通过多种方式实现,下面就来了解一下... 目录一、C++中零拷贝技术的核心概念二、std::string_view 简介三、std::stri

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

C++作用域和标识符查找规则详解

《C++作用域和标识符查找规则详解》在C++中,作用域(Scope)和标识符查找(IdentifierLookup)是理解代码行为的重要概念,本文将详细介绍这些规则,并通过实例来说明它们的工作原理,需... 目录作用域标识符查找规则1. 普通查找(Ordinary Lookup)2. 限定查找(Qualif

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET