【C++】动态开辟二维数组

二维数组在内存中的分配例如以下:

C方式呈现:

<span style="font-size:18px;">
#include <iostream>
using namespace std;  

#define ROW 3
#define COL 4  

void main()
{
    int **p = (int **)malloc(sizeof(int*)*ROW);
    for(int i=0; i<ROW; ++i)
    {
        p[i] = (int *)malloc(sizeof(int) * COL);
    }  

    for(i=0; i<ROW; ++i)
    {
        for(int j=0; j<COL; ++j)
        {
            p[i][j] = i+j;
        }
    }  

    for(i=0; i<ROW; ++i)
    {
        for(int j=0; j<COL; ++j)
        {
            cout<<p[i][j]<<" ";
        }
        cout<<endl;
    }  

    for(i=0; i<ROW; ++i)
    {
        free(p[i]);   //delete []p[i]
    }
    free(p);          //delete []p;  

} 
 </span>

C++:

注意这里使用的列优先方式:

<span style="font-size:18px;">
#include<iostream>
using namespace std;  

#define ROW 3
#define COL 4  

void main()
{
    int(*p)[COL] = new int[ROW][COL];
    for(int i=0; i<ROW; ++i)
    {
        for(int j=0; j<COL; ++j)
        {
            p[i][j] = i+j;
        }
    }  

    for(i=0; i<ROW; ++i)
    {
        for(int j=0; j<COL; ++j)
        {
            cout<<p[i][j]<<" ";
        }
        cout<<endl;
    }
    delete []p;
}
</span>
时间: 2024-10-21 07:44:23

【C++】动态开辟二维数组的相关文章

一句话动态开辟二维数组

#include<iostream> using namespace std; //动态开辟int p[4][5]数组 void main() { //为了验证正确性,我们先把开辟的一维数组赋值给 pp int *pp=new int[20]; int i=0,j=0; for(i=0;i<20;i++)//为一维数组中每一个元素赋值,并输出该元素地址 { pp[i]=i; cout<<&(pp[i])<<" ";//即 pp+i }

转:用STL中的vector动态开辟二维数组

用STL中的vector动态开辟二维数组 源代码:#include <iostream>#include <vector>using namespace std;int main(){ int m, //行数     n; //列数 cout << "input value for m,n:"; cin>>m>>n;  //注意下面这一行:vector<int后两个">"之间要有空格!否则会被认

[ 1001] 动态开辟二维数组的说明

开辟二维数组的说明 图解  [1][][][][] [2][][][][] [3][][][][] void main() { int i,j; /*注意申请的指针格式  先创建的是1,2,3首地址为指向指针的指针a来代表 1,2,3所在地址*/ int **a = (int **) malloc(sizeof(int *) * 3); /* 循环创建了3个 1*4的数组 并将首地址给了 1,2,3的位置上*/ for (j=0;j<3;j++) { a[j] = (int *) malloc(

【C语言】 动态开辟二维数组

#include <stdio.h> #include <stdlib.h> int main() { //int arr[3][4]; int **arr = (int**)malloc(sizeof(int*) * 3); int i = 0; int j = 0; int k = 1; for(i = 0;i<3;i++) { arr[i] = (int *)malloc(sizeof(int) * 4); //  memset(arr[i],1,(sizeof(int

C++中动态申请二维数组并释放方法

C/C++中动态开辟一维.二维数组是非常常用的,以前没记住,做题时怎么也想不起来,现在好好整理一下. C++中有三种方法来动态申请多维数组 (1)C中的malloc/free (2)C++中的new/delete (3)STL容器中的vector 下面逐一介绍: 第一种:malloc/free 1.动态开辟一维数组 [cpp] view plaincopy //动态开辟一维数组 void dynamicCreate1Array() { int m; int i; int *p; printf("

C语言 动态创建二维数组

/*C语言 如何动态创建二维数组 转化为一维数组申请数组,创建和释放都比较简单 */ #include <stdlib.h> #include <stdio.h> #include <malloc.h> #define RANK 10 #define COLUMN 7 int main() { int i,j; int (*p)[COLUMN]; //动态生成二维数组,指定列数为COLUMN,如果想改,自己该里面 //的参数,如果想定义n行2列就为: p=(int (*

C++动态申请二维数组与拷贝构造函数

一.C++动态申请二维数组 在C++中不能直接动态申请二维数组,经过一番搜索,发现一种动态申请二维数组较好的方法. 代码如下(MATRIX_TYPE为某一种类型,Lines和Columns): MATRIX_TYPE** elem; //C++二维矩阵动态申请空间 elem = new MATRIX_TYPE*[Lines]; elem[0] = new MATRIX_TYPE[Lines * Columns]; for(int i = 1; i < Lines; i++) elem[i] =

动态创建二维数组

vector创建二维数组 初始化二维数组 vector<vector <int> > ivec(n ,vector<int>(m)); //n*m的二维vector vector<vector <int> > ivec(n , vector<int>(m, 0)); //n*m的二维vector,所有元素为0 动态创建m*n的二维 方法一: vector<vector <int> > ivec; ivec.re

【C语言】动态创建二维数组

//动态创建二维数组 #include <stdio.h> #include <stdlib.h> #include <malloc.h> int main() { int i,j; int n,m; //以n行5列为例 int (*p)[5]; printf("请输入行数:"); scanf("%d",&n); p=(int(*)[5])malloc(5*n*sizeof(int)); for(i=0;i<n;i+