动态定义数组

首先:为什么需要动态定义数组呢?
  这是因为,很多情况下,在预编译过程阶段,数组的长度是不能预先知道的,必须在程序运行时动态的给出
  但是问题是,c++要求定义数组时,必须明确给定数组的大小,要不然编译通不过 
 
  如: int Array[5];正确

       int i=5;
       int Array[i]; 错误 因为在编译阶段,编译器并不知道 i 的值是多少

   那么,我们该如何解决定义长度未知的数组呢?
   答案是:new 动态定义数组 

   因为new 就是用来动态开辟空间的,所以当然可以用来开辟一个数组空间
   
   这样,下面的语句:
    int size=50;
    int *p=new int[size]; 是正确的
 
   但是二维动态数组能不能也这样定义呢
   
  int size=50,Column=50;
  int (*p)[Column]=new int [size][Column]

  这样的语句,编译器通不过,为什么呢?
  首先 new int[size][Column] 就是动态生成时确定的,所以它没有错
  那么就是 int(*p)[Column],这句有问题了,这句为什么不对呢, 那是因为,这是一个定义语句,而定义语句先经过编译器进行编译,当编译器运行到此处时,发现Column 不是常数,因此不能通过编译。 而之所以编译器认为Column 不是常数,是因为编译阶段,编译器起的作用是查语法错误,和预分配空间,它并不执行程序,因此,没有执行那个赋值语句(只是对这个语句检查错误,和分配空间),因此编译阶段,它将认为column 是个变量。所以上面的二维数组定义是错误的, 它不能通过编译。

  改成这样:
  int size=50
  int (*p)[50]=new int [size][50]
  便正确了。

   由此可见,这种动态分配数组,仅对一维数组空间是真正动态分配的。
   但是如何真正的动态分配二维数组呢,即如果Column 也不能预先知道的话,该如何处理呢?
   
   上面的动态分配已经不能满足我们的要求,因为上面动态分配只对一维数组是真正动态的,对二维数组的话,必须编译之前预先知道二维数组每一列的长度,而这个长度在很多情况下是不能预先知道的,所以我们得结合其他方法来解决这个问题。
   
   既然一维是真正的动态分配的话,那我们利用这一特性定义一个指针数组。
   
   int **p= new int*[size];//定义指针数组 
   int *p[5];//  假若知道二维数组的行数为5

   然后对指针数组中的每一个指针分配一个一维数组空间,这样便动态定义了二维数组
  
   事实上,我认为指针数组的主要用途,就在于动态定义多维数组
    
    for(int i=0;i<size;i++)
   {
     p[i]=new int[Column];
   }
   
   运行完毕后,一个二维数组便被动态的成功建立

-----------------------------------

 

例子:

 

   size =6;

 

   column =5

 

   int **p=new int*[size];

 

    for(int i=0;i<size;i++)
   {
     p[i]=new int[Column];
   }

 

 

 

所生成的动态数组如下图所示:

 

 

 
   

  最后 ,因为调用了new, 千万千万别忘记在用完之后,将其所占资源 delete 掉

 

  下面是delete方法:

 

 

 

    for(int i=0;i<size;i++)
   {

           delete []  p[i];   // 要在指针前加[] , 否则的话 只释放p[i]所指的第一个单元所占的空间
   }

 

   delete [] p;     //最后不要忘掉 释放掉开辟的指针数组  :》

转载于:https://www.cnblogs.com/yyxayz/p/4110872.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575060.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sql随机抽取数据50条_厉害!苏宁通过citus打造分布式数据库抗住DB高负载

2018-07-16 23:59内容来源&#xff1a;2017 年 10 月 20 日&#xff0c;苏宁云商IT总部资深技术经理陈华军在“PostgreSQL 2017中国技术大会”进行《苏宁citus分布式数据库应用实践》演讲分享。IT 大咖说&#xff08;微信id&#xff1a;itdakashuo&#xff09;作为独家视频合作…

java中Debug调试、异常的概念、异常体系、处理异常的关键字try/catch/finally/throw/throws、多个异常使用捕获并处理的方式、继承关系中处理异常、自定义异常类

Debug调试&#xff1a; bug指程序当中遇到的一些错误异常&#xff0c;Debug指调试bug,找到bug对其解决&#xff1b;debug可以让代码逐行执行&#xff0c;查看代码执行的过程&#xff0c;调试程序中出现的bug或异常。 public class DebugClass {public static void main(Strin…

densenet网络结构_FC-DENSENET用于图像分割学习笔记

近日使用FC Dense Net 做分割&#xff0c;记录学习使用过程。FC-DenseNet 原文链接&#xff1a;https://arxiv.org/abs/1611.09326 《The One Hundred Layers Tiramisu: Fully Convolutional DenseNets for Semantic Segmentation》初次使用此网络&#xff0c;第一眼是被这个名…

mongodb mysql资源占用_如何限制mongodb启动时占用过多内存

默认情况下&#xff0c;mongodb占用的内存大小为&#xff1a;Starting in 3.4, the WiredTiger internal cache, by default, will use the larger of either:50% of RAM minus 1 GB, or256 MB.下面我们来看一下限制mongodb启动时占用内存的方法&#xff1a;新增配置文件 /etc/…

js ...运算符_「 giao-js 」用js写一个js解释器

前言在这篇文章中,我们将通过 JS 构建我们自己的 JS 解释器,用 JS 写 JS,这听起来很奇怪,尽管如此,这样做我们将更熟悉 JS,也可以学习 JS 引擎是如何工作的!什么是解释器 (Interpreter) ?解释器是在运行时运行的语言求值器,它动态地执行程序的源代码。 解释器解析源代码,从源代…

地区json文件_【小例子】使用jQuery实现省市区三级联动显示,附源码json文件

开发工具-intellij IDEA需求1.实现对json文件的读取。2.可以在省级选择所有省名和直辖市名3.选择一级省名后自动刷新市名4.选择二级市名后自动刷新区名逻辑分析第一步&#xff1a;读取json文件第二步&#xff1a;遍历出所有一级的省名第三步&#xff1a;把遍历出来的省名动态追…

qt 状态栏

有段时间没有写过博客了。假期去上海旅游&#xff0c;所以一直没有能够上网。现在又来到这里&#xff0c;开始新的篇章吧&#xff01;今天的内容主要还是继续完善前面的那个程序。我们要为我们的程序加上一个状态栏。状态栏位于主窗口的最下方&#xff0c;提供一个显示工具提示…

动态获取textarea后面的p标签_HTML简单标签连起实现的小玩意:

《今天不发知识点&#xff0c;刚被误封了&#xff0c;所有没有太多时间去给整理哈&#xff0c;请谅解》&#xff08;谢谢欣赏&#xff09;前面发了那么多HTML标签&#xff0c;今天来玩个小视频&#xff0c;小白也能几分钟就会的&#xff0c;代码没有写好&#xff0c;时间急了点…

elipse+pydev+python开发arcgis脚本程序

环境配置参考&#xff1a;http://www.cnblogs.com/halfacre/archive/2012/07/22/2603848.html 添加arcpy类库、arctoolbox、arcgis-bin如下所示。 windos——preference——pydev 完成环境配置。 二、获取文件路径Python方法 os.getcwd()返回的是当前文件的目录。假如我的代码…

BZOJ3427 Poi2013 Bytecomputer

可以YY一下嘛 最后一定是-1, -1, ..., -1, 0, 0, ... 0, 1, 1, ..., 1的一个数列 于是f[i][j]表示到了第i个数&#xff0c;新数列的第j项为-1 or 0 or 1的的最小代价 然后就没有然后了 1 /**************************************************************2 Problem: 3427…

mysql timdir_MYSQL学习笔记——数据类型

mysql的数据类型可以分为三大类&#xff0c;分别是数值数据类型、字符串数据类型以及日期时间数据类型。数值数据类型数值类型又可以分为整型、浮点类型、Decimal。整型mysql的整型可以分为TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT&#xff0c;下表给出了每个类型的存储空间…

python编写网页游戏脚本_[大数据]用Python脚本做一些网页游戏中力所能及的自动化任务 - 码姐姐找文...

下面是一段自动登录360传奇霸业游戏的脚本&#xff1a; from pymouse importPyMouseimporttimeimportwebbrowserfrom pykeyboard importPyKeyboard url "http://cqby.wan.360.cn/game_login.php?server_idS577&&srcloginhistory"webbrowser.open_new_tab(ur…

flutter怎么添加ios网络权限_使用Flutter控制蓝牙通讯

背景知识视频教程Dart和Flutter&#xff1a;完整的开发人员指南 - 国外课栈​viadean.comFlutter使用Firestore构建复杂的Android和ios应用 - 国外课栈​viadean.comFlutter的实际项目 - 国外课栈​viadean.com您想使用蓝牙玩物联网设备&#xff0c;但不能在其中放置任何软件吗…

python网页结构分析_Python爬虫基础之网页组成解析

当我们用浏览器访问网站时&#xff0c;每个网页的大不相同&#xff0c;你是否想过它为什么会呈现多种不同的样式呢&#xff1f;就让我们一起了解一下网页的基本组成、结构和节点等内容吧&#xff01;网页的组成 网页可以分为三大部分——HTML、CSS和JavaScript。如果把网页比作…

完全开源im框架_【行业资讯】移动端开源 IM 框架 MobileIMSDK v5.0 发布!

一、更新内容简介本次更新为主要版本更新&#xff0c;强势升级&#xff0c;可同时支持TCP、UDP两种协议&#xff0c;精心封装之下&#xff0c;实现一套API、两种协议同时并存。可能是市面上唯一同时支持UDPTCP两种协议的同类IM框架。二、MobileIMSDK简介MobileIMSDK是一套专为移…

python使用函数目的_Python函数的概念和使用

Python Python开发 Python语言 Python函数的概念和使用函数 为了便于程序的维护和更好的实现模块化&#xff0c;好的程序都会分解为很多函数。 可以这么说&#xff0c;对于任何的编程语言&#xff0c;函数都是一个非常重要的概念。 python 不仅简化了函数的定义过程&#xff0c…

feign直接走熔断_SpringCloud微服务面试必问:Hystrix 服务降级、熔断

本文作者&#xff1a;JLSong 本文链接&#xff1a;https://www.cnblogs.com/songjilong/p/12770999.html1、Hystrix是什么&#xff1f;Hystrix 是一个用于处理分布式系统的延迟和容错的开源库&#xff0c;在分布式系统里&#xff0c;许多依赖不可避免的会调用失败&#xff0c;比…

python里面print是什么意思_python里print是什么意思

python里print是什么意思,多个,是一个,对象,默认值,一个函数 python里print是什么意思 易采站长站&#xff0c;站长之家为您整理了python里print是什么意思的相关内容。 Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。Python由Guido van Rossum于1989年底发明…

mysql 用户管理系统_mysql 用户管理

MySQL账户管理在我们之前登录MySQL的时候我们都是直接使用的root用户&#xff0c;root用户属于数据库系统中的超级管理员&#xff0c;有权限对mysql进行任何想要做的操作。如果在生产环境下操作数据库时也是全部直接使用root账户连接&#xff0c;这就和悬崖边跳舞差不多。所以 …

执行一次怎么会写入两次数据_浅谈 Redis 数据持久化之 AOF 模式

我们知道 Redis 之所以读写快、性能高&#xff0c;得益于它是一种基于内存的数据库&#xff0c;毫无疑问它的操作都几乎都是基于内存。但是内存型数据库也有一个很大的弊端&#xff1a;如果进程崩溃或者服务重启的时候内存数据得不到保存&#xff0c;就会造成数据丢失。为了解决…