精华内容
下载资源
问答
  • c++ 动态分配数组

    2020-08-30 16:04:02
    动态分配一维数组 int n=5; int *array=new int[n];//!!!!!!1 //删除数组指针 delete[]array;//不要忘了括号,否则只会删除第一个单元 动态分配二维数组 //!!!动态分配二维数组!!! int n=10; int **memo = new int*...

    动态分配一维数组

    int n=5;
    int *array=new int[n];//!!!!!!1
    //删除数组指针
    delete[]array;//不要忘了括号,否则只会删除第一个单元
    

    动态分配二维数组

    //!!!动态分配二维数组!!!
    int n=10;
    int **memo = new int*[n];//!!!!
    for (int i = 0; i < n; ++i)
    	memo[i] = new int[n];//!!!!
    
    //delete二维数组
    for (int i = 0; i < n; ++i)
    	delete[]memo[i];
    	
    delete[]memo;
    
    

    参考文章:c++定义动态数组

    展开全文
  • C++动态分配数组

    2020-11-25 15:26:49
    int *node = new int[N+1]; //记录节点内部有多少个车子 int **Position = new int*[N+1]; //邻接矩阵 for(int i=0;i<N+1;i++) { Position[i] = new int[N+1];... 可以直接分配 /* 当然,最后别忘记了释放空间
    int *node = new int[N+1];  //记录节点内部有多少个车子
        int **Position = new int*[N+1];  //邻接矩阵
        for(int i=0;i<N+1;i++)
        {
            Position[i] = new int[N+1];
        }
    //vector<vector<int>> a(N+1,vector<int>[N+1]);  可以直接分配  
    
    /*
    当然,最后别忘记了释放空间
    for(int i=0;i<N+1;i++)
    {
        delete[] Position[i];
    }
    delete[] Position;
    */
    
    展开全文
  • c++动态分配数组空间

    2020-07-19 09:53:39
    c++动态创建数组 malloc 创建一维数组 int *p=(int*)malloc(n*sizeof(int)); 创建二维数组 int **p; cin>>n; p=(int**)malloc(n*sizeof(int*));//第一维 for(int i=0; i<n; i++) p[i]=(int*)malloc...

    c++动态分配数组空间

    • malloc

    创建一维数组

    int *p=(int*)malloc(n*sizeof(int));
    

    创建二维数组

     int **p;
     cin>>n;
     p=(int**)malloc(n*sizeof(int*));//第一维
     for(int i=0; i<n; i++)
         p[i]=(int*)malloc(n*sizeof(int));//第二维
    

    n表示要创建数组的大小

    • vector

    动态分配一维数组:

    int n=3;
    vector<int> p(n);
    

    动态分配二维数组:

    int n=3;
    vector<vector<int>>p(n,vector<int>(3));
    
    展开全文
  • 环境:Win10 x64,VS2015 问题:最近项目用到C++ 调用 Fortran,传参是多维数组...分析:查阅资料才知道,数组动态分配内存有两种方式: 方法1: void malloc2D_1(int **&a) { a = new int*[xDim]; for(int i.

    环境:Win10 x64,VS2015

    问题:最近项目用到C++ 调用 Fortran,传参是多维数组,如果C++ 端定义data[3][4][5],Fortran 接收数据没有问题,

    但是数组data的容量是不定的,需要动态确定,然后我是这样写的:

    void CreateArray(float****&data, int km, int jm, int im, int igm)
    {
        data = new float***[km];
        for (int k = 0;k < km;++k)
        {
            data[k] = new float**[jm];
            for (int j = 0;j < jm;++j)
            {
                data[k][j] = new float*[im];
                for (int i = 0;i < im;++i)
                {
                    data[k][j][i] = new float[igm];
                }
            }
        }
    }

    然后将数组传到Fortran,Fortran端数据就截断了,只传过去最底层一个数组的数据.......

    需要注意的是,C++ 端不要把 std::vector<std::vector<>> 当成数组传参,因为他们也是不连续的!!!


    分析:查阅资料发现,C++ 数组动态分配内存有两种方式:

    方法1: 

    void malloc2D_1(int **&a)
    {
        a = new int*[xDim];
        for(int i=0;i<xDim;i++)     
            a[i] = new int[yDim];
        assert(a!=NULL);
    }
     
    int main()
    {
        int **arr = NULL;
        malloc2D_1(arr);
    }

     

    首先arr是一个二级指针,为arr分配xDim空间,每一维都是一个指向数组的指针,且每个数组内部的地址空间是连续的,但是数组之间的地址空间没有连续性。

    方法2:

    void malloc2D_2(int **&a) 
    {
        a = (int **)malloc( xDim * sizeof(int *) );
        a[0] = (int *)malloc( xDim * yDim * sizeof(int) );
        for(int i=1;i<xDim;i++)
        {
            a[i] = a[i-1] + yDim;        
        }
        assert(a!=NULL);
    }
     
    int main()
    {
        int **arr = NULL;
        malloc2D_2(arr);
    }

    动态分配了一个一维的连续的空间,然后让相应的数组指针指向某些固定的位置达到调用的目的。

     但是第二种方式的写法有些麻烦,可以优化成:

    #include <iostream>
    
    // X x Y x Z matrix
    #define X 2
    #define Y 3
    #define Z 4
    
    // Dynamic Memory Allocation in C++ for 3D Array
    int main()
    {
    	// dynamically allocate memory of size X*Y*Z
    	int* A = new int[X * Y * Z];
    
    	// assign values to allocated memory
    	for (int i = 0; i < X; i++)
    		for (int j = 0; j < Y; j++)
    			for (int k = 0; k < Z; k++)
    				*(A + i*Y*Z + j*Z + k) = rand() % 100;
    
    	// print the 3D array
    	for (int i = 0; i < X; i++)
    	{
    		for (int j = 0; j < Y; j++)
    		{
    			for (int k = 0; k < Z; k++)
    				std::cout << *(A + i*Y*Z + j*Z + k) << " ";
    
    			std::cout << std::endl;
    		}
    		std::cout << std::endl;
    	}
    
    	// deallocate memory
    	delete[] A;
    
    	return 0;
    }

    参考链接:

    1. https://blog.csdn.net/lavorange/article/details/42879605

    2.https://www.techiedelight.com/dynamic-memory-allocation-in-c-for-2d-3d-array/

    展开全文
  • 简单的C++动态分配数组

    千次阅读 2018-09-03 00:10:23
    //此处是动态声明 一个指向整数的指针 //* m=50;//这句话若生效,输出的是50,现在是失效状态,输出30 cout&lt;&lt;"* m:"&lt;&lt;*m&lt;&lt;endl; floa...
  • 1 引言对于计算机程序处理而言,对内存的管理就像是对一片雷区的管理,管理的好,可以杀死一片一片的bug,管理的不好,将使你自己抓狂,程序...2 内存分配方式内存分配方式有三种:(1)从静态存储区域分配。内...
  • C对象有4种存储期:静态存储期、线程存储期、自动存储期、动态分配存储期。如果对象具有静态存储期,那么它在程序的执行期间一直存在。文件作用域变量具有静态存储期。注意,对于文件作用域变量,关键字static表明了...
  • C++中,如果想要申请动态数组,必须要用动态分配的方式。
  • 相信很多同学在初学C语言时候,都会遇到遇到一个问题:指针,永远的神!好消息,这个痛点将会在这篇文章得到解决,...然后是三大基本结构顺序循环分支,随后的内容几乎都是对数据类型的扩充结构体 指针 链表 数组...
  • c++:malloc - free and new - delete 代码(已通过编译): #include <iostream> #include <cstdio> #include <cstdlib> #include <cmath> #include <climits> #include &...
  • 以前我们先接触到数组,知道这是一种静态分配的方式,在程序执行前需要多少存储单元都是要提前规划好的,使用过程中需要再分配或者对多余内存进行回收是不方便的。接着我们引入了动态存储分配,这种方式正好和静态...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,118
精华内容 1,247
关键字:

c++动态分配数组

c++ 订阅