C++数组的动态分配(new)、初始化(memset)和撤销(delete)

您所在的位置:网站首页 new创建数组定义初始值 C++数组的动态分配(new)、初始化(memset)和撤销(delete)

C++数组的动态分配(new)、初始化(memset)和撤销(delete)

2024-06-11 03:07| 来源: 网络整理| 查看: 265

数组的动态分配(new)、初始化(memset)和撤销(delete)

 

一维数组的动态分配,初始化和撤销都好说,几乎每一本C++教材都会做出详细的说明。具体如下:

 

动态分配(例如分配n个单元的): int *array=newint [n];

 

初始化:memset(array,0,n*sizeof(array));       (也可以利用一个for循环对其赋值初始化)

 

撤销:delete [] array;

 

下面来说二维数组的。

 

二维数组(n行m列)利用new来进行动态分配实际上相当于对n个m元数组进行动态分配,只不过我们不能一味的按照动态分配一维数组的方法来进行这项操作。MSVC目前还没有这般的人性化,具体应该这样做:

 

int **array;

array=new int *[10];

for(int i=0;i

     delete[] array[i];

}

delete [] array;

 

 

三维数组用一个例子说明:

 

#include

#include

 

#define size1 5

#define size2 10

#define size3 15

 

int main()

{

       int *** arr;

       int i,j,k;

       /// 动态开辟 相当于arr[size1][size2][size3]

       arr = new int**[size1];

       for (i = 0; i < size1; i ++) {

              arr[i] = new int*[size2];

              for (j = 0; j < size2; j ++) {

                     arr[i][j] = new int[size3];

              }

       }

       /// 用for循环初始化

       for (i = 0; i < size1; i ++) {

              for (j = 0; j < size2; j ++) {

                     for (k = 0; k < size3; k ++) {

                            arr[i][j][k] = i * j * k;

                     }

              }

       }

       for (i = 0; i < size1; i ++) {

              for (j = 0; j < size2; j ++) {

                     for (k = 0; k < size3; k ++) {

                            printf("i*j*k=%d*%d*%d=%d/n",i,j,k,arr[i][j][k]);

                     }

              }

       }

       /// 用memset,如果是静态int arr[][][]的话,直接memset(arr,0,sizeof(arr));数组初始化为0

 

       for (i = 0; i < size1; i ++) {

              for (j = 0; j < size2; j ++) {

                     memset(arr[i][j],-1,sizeof(int) * size3);

              }

       }

 

       for (i = 0; i < size1; i ++) {

              for (j = 0; j < size2; j ++) {

                     for (k = 0; k < size3; k ++) {

                            printf("i,j,k=%d,%d,%d=%d/n",i,j,k,arr[i][j][k]);

                     }

              }

       }

 

       / 释放内存

       for (i = 0; i < size1; i ++) {

              for (j = 0; j < size2; j ++) {

                     delete[] arr[i][j];

              }

              delete[] arr[i];

       }

       delete[] arr;

       return 0;

}

http://blog.csdn.net/shanzhizi



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3