C++ 用变量定义数组
较早的编译器是不同意这样做的,所以一些书籍比方以Tc解说的书本都说数组的下标不能是变量。在vc6.0下亦是如此。
只是在一些较新的编译器如dev c++已经支持了,例如以下代码不会报错
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a; int i;
scanf("%d",&a);
int c[a];
for( i = ;i<a;i++)
scanf("%d",&c[i]);
for( i = ;i<a;i++)
printf("%d",c[i]);
}
如果想用变量定义数组有很多种方式
首先可以使用指针:
一维:
cin>>n;
int* a=new int[n];
if ((a) == NULL)
{
//动态分配失败
}
可是new出来的一定不要忘了delete掉
delete []a; // 正确的使用方法
delete a; // 错误的使用方法
后者相当于delete a[0],漏掉了另外n-1个对象。
二维:
//设有m行n列
cin>>m>>n;
int **a = new int* [m];
for(int i = ; i < m; i++)
{
a[i] = new int [n];
}
这样就相当于产生了一个二维数组a[m][n]了,可是对于我们平时声明的数组a[m][n],a[i][j]=a[i*n+j],由于是连续的一片内存,而这样动态声明的数组随意的a[k]都是一个int*类型,即一个地址了,
所以仅仅能a[i][j]或者*(*(a+i)+j)来訪问数组的元素,而不能a[i*n+j]这样转换着用。
//释放内存:
for(int i = ; i < m; ++i) { delete []a[i];
}
delete []a;
释放内存
还有就是使用STL容器
之所以动态声明数组,相比是大小不确定,声明太大了怕浪费空间,而vector就不用指定大小,当存的数据变多,自己主动扩大容量,比方如果vector默认大小是8,当你再往里存第9个元素时,容器自己主动扩容,变为16,16再不够用,扩为32,2倍2倍的增长,这样就依据须要扩容,不会浪费空间,也能够像普通数组那样直接指定vector的大小,总之普通数组能够的它都能够,普通数组没有的它更有。
第一种方法
#include <string.h>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std; int main()
{
int N=, M=;
vector<vector<int> > obj(N); //定义二维动态数组大小5行
for(int i =; i< obj.size(); i++)//动态二维数组为5行6列,值全为0
{
obj[i].resize(M);
} for(int i=; i< obj.size(); i++)//输出二维动态数组
{
for(int j=;j<obj[i].size();j++)
{
cout<<obj[i][j]<<" ";
}
cout<<"\n";
}
return ;
}
一
第二种方法
#include <string.h>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std; int main()
{
int N=, M=;
vector<vector<int> > obj(N, vector<int>(M)); //定义二维动态数组5行6列 for(int i=; i< obj.size(); i++)//输出二维动态数组
{
for(int j=;j<obj[i].size();j++)
{
cout<<obj[i][j]<<" ";
}
cout<<"\n";
}
return ;
}
二
以上就是动态数组的定义方法啦。
C++ 用变量定义数组的更多相关文章
- 002-shell变量定义、使用、字符串、数组、注释
一.变量定义 定义变量时,变量名不加美元符号($) name="lhx" 注意,变量名和等号之间不能有空格.同时,变量名的命名须遵循如下规则: 命名只能使用英文字母,数字和下划线, ...
- 【转】如何把变量或者数组定义到SDRAM及任意位置
我们开发软件的时候,经常会遇到到一个问题,就是内存不够,这个时候就纠结了,怎么办,有两种方法,第一种是扩展内存,外加SRAM或者SDRAM:第二种应该就是优化代码,也就是通常所说的把数组大小减一减,代 ...
- test dword ptr [eax],eax ; probe page.局部数组变量定义所分配的最大空间为1M
问题的出现 使用VS2017编写程序时,程序编译可以通过,但运行时就会弹出错误 经过查证发现: 这跟局部数组变量定义所分配的最大空间设置大小有关. 局部变量的申请空间是存放于栈中,windows里默认 ...
- C语言中数组长度不能用变量定义吗?
C语言里,所有变量空间都是在程序运行之初向系统申请的,包括指针,除了一些动态申请方式如malloc函数.没有申请的空间系统是不允许读写的.那么如果一个数组大小是变量定义,则在程序运行前不能确定数组大小 ...
- Java最常用的变量定义汇总
Java最常用的数据类型有基本数据类型,字符串对象,数组,基本数据类型又分为:数值型(包括整形和浮点型),字符型,布尔型,下面用一个简单的程序把这些数据类型汇总一下 public class Java ...
- 动态定义数组 .xml
pre{ line-height:1; color:#3c3c3c; background-color:#d2c39b; font-size:16px;}.sysFunc{color:#627cf6; ...
- 使用typedef语句定义数组类型
使用typedef语句定义数组类型 1. 一维数组类型的定义格式 typedef <元素类型关键字><数组类型名>[<常量表达式>]; 例如: (1) ty ...
- 如何判断一个变量是数组Array类型
在很多时候,我们都需要对一个变量进行数组类型的判断.JavaScript中如何判断一个变量是数组Array类型呢?我最近研究了一下,并分享给大家,希望能对大家有所帮助. JavaScript中检测对象 ...
- Ansible系列(六):各种变量定义方式和变量引用
本文目录:1.1 ansible facts1.2 变量引用json数据的方式 1.2.1 引用json字典数据的方式 1.2.2 引用json数组数据的方式 1.2.3 引用facts数据1.3 设 ...
随机推荐
- JavaScript在div后添加删除div
var idd = 'str'; $('.task-done-detail-content-p7').click(function () { var id = this.id; if(idd !== ...
- 转:为什么要有Spring?
Java后端技术https://mp.weixin.qq.com/s?__biz=MzI1NDQ3MjQxNA==&mid=2247484822&idx=1&sn=6fbee2 ...
- 医学图像数据(三)——TCIA部分数据下载方式
前为止,本人还没有找到不需要账号的就可以部分下载的方式,因此这里讲的是需要注册账号下载部分数据的方法. 注意:下载部分数据需要注册账号 注册账号网址:https://public.cancerimag ...
- A previous installation of Qt5 Visual Studio Add-in was detected. Please uninstall it before running this installer解决办法
前段时间在安装Qt Visual Studio插件的时候,安装到一半不小心中止了,结果后来怎么安装都不行,提示已经安装了,要先卸载, 可是到哪里都找不到有卸载的,因为压根就没有安装完成.这可害苦我了. ...
- java学习笔记04-基本数据类型
编写一款可用的软件,离不开对数据的操作(经常有人说:程序=数据+算法).数据可能有很多类型,比如对于年龄来说,数据就是整数. 对于金额来,数据是带小数的.在java中,可以分为内置数据类型和引用数据类 ...
- 如何使用Linux的Crontab定时执行PHP脚本的方法[转载]
首先说说cron,它是一个linux下的定时执行工具.根用户以外的用户可以使用 crontab 工具来配置 cron 任务.所有用户定义的 crontab 都被保存在/var/spool/cron 目 ...
- GitLab实战操作指南
一.Git原理 1.Git是什么? Git是目前世界上最先进的分布式版本控制系统(没有之一). 2.Git有什么特点? 简单来说就是:高端大气上档次! 3.GIt与SVN区别 SVN管理: 属于集中式 ...
- C# 操作Session、Cookie,Url 编码解码工具类WebHelper
using System; using System.Collections.Generic; using System.IO; using System.Net; using System.Text ...
- 安装kafka过程及出现的问题解决
第一步:下载kafka安装包 下载地址:http://kafka.apache.org/downloads 解压 到/usr/local 目录 tar -zxvf kafka_2.12-2.2.0 第 ...
- eclipse中jetty插件安装
注:本文来源于:<eclipse中jetty插件安装> 一.eclipse中jetty插件安装: 打开eclipse,依次点击菜单Help->Eclipse Marketplace, ...