C++二维数组的动态声明

int **a  =  new int* [m]   //分配一个指针数组,将其首地址保存在a中   、

for(int i = 0; i < m; i++)   //为指针数组的每个元素分配一个数组

a[i] = new int [n];

相当于产生了一个二维数组 a[m][n]了

静态声明的数组可以有公式(假设也是m行n列)

b[i][j] = b[i*n +j]

这是因为数组b是连续的一片内存,而动态声明的数组任意的a[k]都是一个int*类型,即一个地址,所以只能a[i][j]或者*(*(a+i) + j)来访问数组的元素,而不能a[i*n + j]使用。

动态声明的数组,使用后需要释放内存。

for(int i = 0; i < m; ++i)

delete []a[i];

delete []a;

 1 #include <iostream>
 2 #include <stdlib.h>
 3
 4 using namespace std;
 5
 6
 7 int main()
 8 {
 9     int row,column;
10     cin >> row >> column;
11     //申请空间
12     int **a =  new int* [row];
13     for(int i = 0; i < row; i++)
14         a[i] = new int[column];
15
16     //使用空间
17     for(int j = 0; j < row; j++)
18         for(int k = 0; k < column; k++)
19             a[j][k] = rand() % 100;
20
21     for(int j = 0; j < row; j++)
22     {
23         cout << endl;
24         for(int k = 0; k < column; k++)
25             cout << a[j][k] << " ";
26     }
27     //释放空间
28     for(int i = 0; i < row; i++)
29         delete []a[i];
30     a = NULL;
31
32     return 0;
33 }
 1  //方法二,利用vector创建二维数组
 2 #include <iostream>
 3 #include <stdlib.h>
 4
 5 using namespace std;
 6
 7
 8 {
 9     int row,column;
10     cin>>row>>column;
11   13     //申请空间
14     vector<vector<int> > a(row,vector<int>(column));
15
16
17     //使用空间
18     for(int j = 0;j < row;j++)
19         for(int k = 0;k< column;k++)
20             a[j][k] = rand()%100;
21
22     for(int j = 0;j < row;j++)
23     {
24         cout<<endl;
25         for(int k = 0;k< column;k++)
26         {
27             a[j][k] = rand()%100;
28             cout<<a[j][k]<<"     ";
29         }
30     }
31     return 0;
32 }  
时间: 2024-10-09 11:17:58

C++二维数组的动态声明的相关文章

JAVASE(八) 数组: 一维数组、二维数组、动态数组、静态数组

1.一维数组 1.1 数组的声明和初始化声明方式: String str[]; //不建议使用 String[] str2; 静态初始化:初始化和赋值同时进行 String[] str = new String[]{“aa”,”bb”} String[] str2 = {“aa”,”bb”} //声明和初始化不可以分开 动态初始化:初始化和赋值分开进行 String[] str = new String[5];//5代表是数组的长度 说明: 无论是静态初始化还是动态初始化,数组一旦创建成功,数组

C语言数组:C语言数组定义、二维数组、动态数组、字符串数组

1.C语言数组的概念 在<更加优美的C语言输出>一节中我们举了一个例子,是输出一个 4×4 的整数矩阵,代码如下: #include <stdio.h> #include <stdlib.h> int main() { int a1=20, a2=345, a3=700, a4=22; int b1=56720, b2=9999, b3=20098, b4=2; int c1=233, c2=205, c3=1, c4=6666; int d1=34, d2=0, d3

二维数组的动态内存分配

申请内存时,首先分配行,再分配列: void malloc2dArray(int **pArr, int x, int y) { int i; pArr = (int **)malloc(x * sizeof(int *)); if(!pArr) { printf("动态申请内存失败!\n"); return NULL; } for(i = 0; i < x; i ++) { pArr[i] = (int *)malloc(y * sizeof(int)); if(!pArr[i

一维和二维数组 动态内存分配

一维数组的动态内存分配 #include "stdafx.h" #include <iostream> using namespace std; int main() { int length,i; int *p; cin>>length; p=new int[length]; for(i=0;i<length;i++) { p[i]=i; //不要写成*p[i]=i; cout<<p[i]<<endl; //不要写成cout<

二维数组作为函数参数传递剖析

前言 很多文章不外乎告诉你下面这几种标准的形式,你如果按照它们来用,准没错: //对于一个2行13列int元素的二维数组 //函数f的形参形式 f(int daytab[2][13]) {...} //以下两种可以忽略行数 f(int daytab[][13]) {...} f(int (*daytab)[13]) {...} 甚至会有人告诉你多维数组作为参数传递可以省略第一维,其他维不能省略.然而你对这种形式并不满意:如果事先限定了二维数组的大小,函数的泛用性就要大打折扣了.因为你真正需要的,

参数传递二维数组

转自http://blog.csdn.net/yunyun1886358/article/details/5659851 数组名作为形参 1 void func1(int iArray[][10]) 2 { 3 4 } 5 6 7 8 int main() 9 { 10 int array[10][10]; 11 func1(array); 12 13 } 编译通过,注意形参声明一定要给出第二个维度的大小,要不编译不过. 一维数组指针作为形参 1 void func2(int (*pArray)

c++ 二维数组传递

我们在传递二维数组时,对于新手来说,可能会存在某些问题,下面讲解几种传递方法 在讲解如何传递二维数组时,先看看如何动态new 二维数组 1 // 二维数组动态申请 2 int row ,col ; 3 cin >> row >> col; 4 5 int** arr; 6 // c++ 形式 7 arr = new int*[row]; 8 for(int i = 0;i<row;i++) 9 arr[i] = new int[col]; 10 11 // c 形式 12 a

C语言二维数组及小项目

语法: datatype name [ rowSize ] [ colSize ] ; double score [ 5 ] [ 3 ] int animate [ 4 ] [ 4 ] 二维数组的动态赋值: ———————————————————————————————— 项目实战: 使用控制台编写一个小游戏分别实现以下功能: ——新增数据 ——修改数据 ——查询数据 ——数据排序 游戏规则: 游戏一共进行10天 每天结算好感度,一旦有三个或者以上的嫔妃好感度低于60,发生暴乱,游戏结束 回顾:

Java连载68-数组的拷贝、二维数组

一.数组的拷贝 函数arraycopy(),参数为:源数组.源数组的开始下标.目标数组.目标数组的开始下标.拷贝长度 package com.bjpowernode.java_learning; ? public class D68_1_CopyOfArrays { public static void main(String[] args) { int[] a1 = {2,3,4,5,6,7,8}; int[] a2 = {10,11,12,13,14,15,16}; System.array