c++动态数组的使用 new

C++中使用new动态声明二维数组的方式 C++中动态二维数组的声明方式 在C/C++中定义动态数组时我们都很熟悉使用的是 new 关键字,基本语法如下: typeName *arrayName = new typeName[arraySize]; 比如若想通过输入的 n 来创建一个数组大小为 n 的 int 型数组时,可以这样写: cin >> n; int *a = new int[n]; 通过上面这个语句我们在内存地址中分配了一片 int[n] 大小的内存空间,并将其首地址赋值给了 a ,在这里 a 是 int* 类型的指针变 阅读详情
AI摘要

本文详细介绍了如何在C++中使用动态数组(包括一维和二维),涉及new和delete操作符的使用,以及内存释放的最佳实践。通过实例演示了一维动态数组的创建、输入、输出和释放,以及二维动态数组的定义、元素分配、读写和内存清理过程。

在c++中,有的时候会遇到变长的数组(不管是一维的还是二维的),这个时候就需要用到动态数组了,并且要用new和delete两个操作符,这俩操作符一般成对使用。

一维的动态数组

#include<iostream>
using namespace std;

int main()
{
	int n;   //输入数组长度
	cin >> n;
	int* p= new int[n]; /*创建了一个长度为n的动态数组,并且返回这个数组的首地址给p,p就指向了这个动态数组,可以通过指针p
				  来操作数组,因为创建的动态数组并没有名字,只返回了首地址给p,所以可以把p看作是这个动态数组的名字 */
	for (int i = 0; i < n; i++)
	{
		cin >> p[i];
	}
	for (int i = 0; i < n-1; i++)
	{
		cout << p[i] << " ";
    }
	cout << p[n-1] << endl;
	cout << p;    //输出指针p的地址
	delete[]p;  //释放这个一维的动态数组,而不是释放指针p。用完以后要记得释放掉

	system("pause");
	return 0;
}

用完了以后,在14行释放掉了这个动态数组,而不是释放的指针p(以便接下来还能使用),接着又输出了指针p的地址。如果你释放掉了指针p,delete p; 那么接下来就

不能再使用用指针p了,因为p所占的内存空间已经释放了,再用的话就会出错。比如在第14行后加上 delete p;然后再执行下一条语句 cout<<p; 来输出p的地址就会报错

二维的动态数组

#include<iostream>
using namespace std;
int main()
{
    int m, n;   //输入数组大小
    cout << "请输入二维数组行数:" << endl;
    cin >> m;
    int* column= new int[m]; //column用来记录每行元素的个数,因为每行元素的个数可能不同,如果都相同的话就不需要了
    int** p = new int* [m];   //声明一个二级指针
     //创建了一个有m行的的二维动态数组;可以看成数组p[m]中每个元素都是指针,用来指向一个数组
    cout << "请输入各行元素个数:" << endl;
    for (int i = 0; i < m; i++)
    {
        cout << "第" << i+1 << "行的元素个数为:" << endl;
        cin >> n;
        column[i] = n;
        p[i] = new int[n];  //确定每行元素的个数,p[i](一级指针)为每行元素的首地址

    }
    for (int i = 0; i < m; i++) //输入每行元素的值
    {
        cout << "第" << i + 1 << "行的元素分别为:" << endl;
        for (int j = 0; j < column[i]; j++)
        {
            cin >> p[i][j];
        }
    }
    cout << "---------输出每行元素-----------\n";
    for (int i = 0; i < m; i++)  //输出每行元素
    {
        for (int j = 0; j < column[i]; j++)
            cout << p[i][j] << " ";
        cout << endl;
    }

    for (int i = 0; i < m; i++)  //用完释放掉每行(释放二级指针)
    {
        delete[]p[i];
    }
    cout << "指针p的地址:" << p;    //输出指针p的地址
    delete[]p;  //释放掉每行后,再释放这个二维数组(释放一级指针)
    return 0;
}

运行结果如下: 

 

C语言实现动态一维/二维数组的申请 int *Array Creat1DArray( int length ) {       int *Array;       Array = (int*)malloc( sizeof(int)*length );      return Array; } 具体实现步骤:调用"stdlib.h"里包含的malloc函数,申请到lengh*sizeof(int)个字节的内存,然后将mal 阅读详情

相关推荐

c++ 使用new动态的创建指定大小的二维数组

动态的创建一个由用户输入的N*N大小的数组: // test.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "iostream" #include "utility.h" using namespace std; int age=18; int _t

Work Hard, Play Harder! 5907

C++动态数组

C++入门,动态二维数组,vector使用

m0_64572251的博客 352

C++中使用关键字new动态分配数组

在C++中,可以使用new关键字动态分配指定类型的数组。1 动态分配的格式使用new动态分配数组的格式为new 类型[数组大小]此时,返回值是指定类型的指针。以下代码动态分配了一个整形数组,该数组包含10个元素,其首地址保存在指针pia中。int* pia = new int[10];需要注意的是,在直接定义数组时,数组的大小必须是常量,而使用new关键字动态分配数组时,即方括号中的大小不必是常量...

hou09tian的博客 9399

C++new运算(动态创建对象)

动态 int (*array)[n] = new int[m][n];静态 int array[10][10] = { {1,1} , {2,2} };数组初始化了array[0][0,1]及array[1][0,1]对二维数组的理解方式很重要:把二维数组看成一个特殊的一维数组,它的元素又是一个一个的一维数组。静态 int array[100];首先,和一维数组的创建其实是一样的,假设有n个元素,那动态一维数组的创建是这样的。注意这种方式不可用: int **array = new int[m][n];

jingbeng11 6821

汽车OTA安全启动:ECU双验签机制与实战排障指南

汽车OTA升级中的安全启动,本质是基于密码学的信任建立过程,其核心在于ECU上电时对固件镜像的可信验证。该机制依托硬件信任根(Secure Boot ROM),通过RSA/ECDSA等非对称算法完成签名验签,确保升级包未被篡改且来源可信。技术价值体现在防止恶意固件注入、支撑功能安全(ASIL)与信息安全(ISO/SAE 21434)合规。典型应用场景包括4S店远程升级、BMS控制器固件更新及多ECU协同启动。实践中,验签名失败往往源于证书链断裂、Flash布局错位或KeyUsage字段不匹配等底层工程细节,

weixin_29314405的博客 76

【干货】SAP物料分类账的简单理解

一、SAP物料分类账理解 物料分类账,简称ML(material ledger),其基本用途是可以用八个字概括“还原成本”、“还原库存”。即通过月底运行物料分类账,将库存差异(原材料-材料成本差异、库存商品-自制半成本差异、库存商品-自制产成品差异)自动按当期库存出库数和库存结存数的比例分摊至成本和库存中。为了理解其概念,可以简单举一个例子: 开一工单,生产A产品,数量为3个,当月全部生产完工

ERP运维咨询(目标和成功) 1万+

int* p=new int[N]与int* p=new int(N)的区别

int *p = new int(N); 这语句是分配一段内存,在其中以值初始化一个int类型对象,返回其指针给定义的p。 p所指的int的初值为0。 int *p = new int[N]; 这语句的意思是:分配一段内存,像数组一样连续存放5个int对象,这些int是默认初始化的。对int类型来说,其初值是不确定的。返回第一个int的指针给p。 ...

qq_44165430的博客 7325

别再问ARM麒麟怎么装微信了!手把手教你用铠大师搞定Windows软件(飞腾/海思芯片实测)

本文详细介绍了如何在ARM架构的信创电脑(如飞腾/海思芯片)上使用铠大师安装和运行Windows软件,解决微信、Office等常用软件的兼容性问题。通过实测数据对比,铠大师在性能和易用性上显著优于传统方案,为麒麟系统用户提供了一套完整的解决方案。

weixin_28736355的博客 889

【和春笋一起学C++】使用new创建动态数组

上面这种方式创建的数组在程序编译时将为它分配内存空间,不管程序最终是否使用数组,数组都在那里,它占用了内存空间。在编译时给数组分配内存被称为静态联编,意味着数组是在编译时加入到程序中的。但如果使用new创建数组,则不在编译阶段为数组分配内存空间,而是在运行阶段创建并分配内存空间。在运行阶段,如果用到了数组则创建,如果用不到数组则不创建,称为动态联编。数组在程序运行时创建,这种数组叫动态数组。......使用静态联编时,必须在编写程序时指定数组的长度,使用动态联编时,程序在运行时确定数组的长度。

计算机视觉算法开发与落地 2116

在 SAP S/4HANA 里把 OData Client Proxy 用顺手,借助 Service Consumption Model 2.0 提前打通远程 OData 调用

摘要:本文探讨了在SAP S/4HANA集成开发中调用外部OData服务的解决方案。传统ABAP代码直接调用方式存在诸多不便,而OData Client Proxy提供了更稳定的途径。文章详细介绍了如何通过Service Consumption Model 2.0在SAP BTP生成模型类,并将其移植到SAP S/4HANA进行适配改造,最终注册为可用的OData Proxy Client。该方法适用于较新版本的SAP S/4HANA系统,通过源码替换实现模型转换,为系统集成提供了高效的类型安全调用方案。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1089

python实现纵横向拉开档次法 (附完整源码)

python实现纵横向拉开档次法 (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 776

C++ 使用new创建动态数组

如果程序只需要一个值,则可能会声明一个简单变量,因为对于管理一个小型数据对象来说,这样做比使用new和指针更简单,尽管给人留下的印象不那么深刻。通常,对于大型数据(如数组、字符串和结构),应使用new,这正是new的用武之地。如果使用new时,不带方括号,则使用delete也不应带方括号。然而,对于ANSI/ISO标准来说,new与delete的格式不匹配导致的后果是不确定的,这意味着程序员不能依赖于某种特定的行为。~如果使用new[]为数组分配内存,则应使用delete [ ] 来释放。

qq_41583263的博客 5158

“快速掌握Vivado FPGA开发流程“——详解Vivado开发流程及实例

快速掌握Vivado FPGA开发流程”——详解Vivado开发流程及实例FPGA技术在现代电子领域中应用越来越广泛,而Vivado作为业界最流行的FPGA设计工具之一,也受到越来越多人的关注和使用。那么如何快速掌握Vivado FPGA开发流程呢?本文将详细介绍Vivado开发流程,并通过实例来加深您的理解。首先,我们需要了解Vivado开发流程的主要步骤:创建工程、设计电路、约束电路、生成比特流。接下来,让我们一步步了解这些步骤。

2301_78484069的博客 731

C++使用new创建动态数组

在C++中,我们可以通过new来声明动态数组,示例如下: int* ptr = new int [10]; 通过这一行代码,我们即可实现声明一个int类型,元素个数为10个的指针,ptr指向当前动态数组的第一个元素,若想要访问动态数组的其他元素 ,则该怎么办呢? 在C++中,指针名则可充当数组名使用,如上述定义的数组,我们访问第一个元素*ptr来访问第一个元素,也可通过ptrp[0],ptr[...

weixin_39583302的博客 2119

TDS水质检测传感器原理图设计,已量产(液体传感器)

最近调试了一款针对生活用水、水培系统的 TDS 水质检测模块 —— 毕竟 TDS(总溶解固体)值直接关联水的洁净程度,是这类场景里既实用又易获取的水质指标。下面拆解下这个电路的设计逻辑,说说每个部分是怎么配合实现精准检测的。

不脱发的程序猿 1536

ATT MTU 交换机制:提升 BLE 数据传输效率的关键

在低功耗蓝牙(BLE)技术的面试中,ATT MTU 交换机制始终是高频考点。无论是芯片厂商的固件开发岗,还是物联网设备的协议栈调试岗,面试官都爱通过这个知识点考察候选人对 BLE 数据传输底层逻辑的理解。本文将系统梳理核心考点,结合历年真题详解应答思路,轻松应对这类问题。​

byte轻骑兵的技术小窝 2411

C++使用 new 声明动态数组

int main() { using namespace std; int* p = new int[3]; // new运算符返回第一个元素的地址。 p[0] = 10; p[1] = 9; p[2] = 8; for (int i = 0; i < 3; i++) { ...

/dev/null 437

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

[c++] 使用 new 来创建动态数组

通常对于大型数据(如数组、字符串和结构)应使用new。 在创建数组时,指定长度;在编译时给数组分配内存被称为静态联编。(不管用不用,都会占用内存) 使用new时,如果在运行阶段需要数组,则创建它;如果不需要,则不创建。还可以在程序运行时选择数组的长度。这被称为动态联编。意味着数组是在程序运行时创建的。这种数组叫做动态数组。在运行时确定数组的长度。 int* p = new int[10]; // new运算符返回第一个元素的地址。 delete [] p; // 释

心宝的博客 1910

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

C++的new和delete的详解以及使用new来创建动态数组

在C语言中,可以用库函数malloc()来分配内存;在C++中仍然可以这样做,但在C++中使用运算符我们只用告诉,需要为哪种数据类型分配空间,将找到一个长度正确的内存块(根据来确定需要多少字节的内存),并返回,然后我们需要将该地址赋给一个该情况下,只能通过指针进行访问。我们说pn指向一个(指的是为数据项分配的),该数据对象可以是,也可以是使用这种方式的是,。new是从被称为(heap)或(freee store)的内存区域分配内存。

m0_74101869的博客 722

C++使用new方法创建动态二维数组

和一维数组的创建其实是一样的,假设有n个元素,那动态一维数组的创建是这样的。而二维数组只是多了一步,先创建n个一维数组,再对这n个一维数组开辟空间。

White--Night的博客 4657

【C++学习笔记】使用New来创建动态数组

1、如何使用C++的new运算符创建数组 创建一个包含10个int元素的数组 int * psome = new int [10]; 程序使用完new分配的内存块时,应该用delete释放 delete [] psome; 使用new和delete时,应遵守以下规则: 1、不要使用delete来释放不是new分配的内存 2、不要使用delete释放同一个内存块两次 3、如果使用

好好学习专用博客 1617

C/C++ 使用new创建动态变量和数组数组

C/C++ 使用new创建动态变量和数组数组

wendyWJGU的博客 910

【C++ Primer Plus学习记录】指针——使用new来创建动态数组

如果程序只需要一个值,则可能会声明一个简单变量,因为对于管理一个小型数据对象来说,这样做比使用new和指针更简单。通常,对于大型数据(如数组、字符串和结构),应使用new。例如,假设要编写一个程序,它是否需要数组取决于运行时用户提供的信息。如果通过声明来创建数组,数组就在那里,它占用了内存。在编译时给数组分配内存被称为静态联编,意味着数组是在编译时加入到程序中的。但是,使用new时,如果在运行阶段需要数组,则创建它;如果不需要,则不创建。还可以在程序运行时选择数组的长度。这被称为动态联编。

qq_39072304的博客 1692

C++学习笔记四之使用new来创建动态数组

【一】 1、静态联编:不管程序最终是否使用数组,数组都在那里,它占用了内存,在编译时给数组分配内存被称为静态联编。 2、动态联编:使用new时,如果在运行阶段需要数组,则创建它;如果不需要,则不创建,数组是在运行时创建的。 指针和数组名之间的差别:指针代表着内存地址可以进行运算,而数组名则不行。 【示例代码】 #include #include int main() { using

GodLei1995 8038

C++使用 new 来创建动态数组

这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大小,这样就无法分配正确的内存空间。如果需要动态地定义数组的大小,可以使用动态内存分配的方式,即使用new运算符来在堆上分配内存空间。需要注意的是,使用动态内存分配后,需要在不再使用数组时手动释放内存,以避免内存泄漏。不能使用变量定义数组大小。

weixin_45766539的博客 381

C++如何使用new来创建动态数组以及使用数组表示法来访问元素

#include < iostream> double * p3 = new double[3]; p3[0] = 0.2; p3[1] = 0.5; p3[2] = 0.8; cout << "p3[1] is " << p3[1] << "." << endl; p3 = p3 + 1; cout << "Now p3[0...

程序员不穿格子衫的博客 1890
上一篇: std::
下一篇: PIPIOJ 1001 水仙花数
DireR9ven
博客等级 码龄5年 792粉丝 21原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值