如何在C/C++中动态分配二维数组

C/C++中动态分配二维数组可以先申请一维的指针数组,然后该数组中的每个指针再申请数组,这样就相当于二维数组了,但是这种方法会导致每行可能不相邻,从而访问效率比较低。如何申请连续的二维数组了?本文将分别三个方面讲解:

一.动态申请列大小固定的二维数组

二.C语言中动态申请连续的二维数组

三.C++语言中动态申请连续的二维数组

 

一.动态申请列大小固定的二维数组

首先如果二维数组的列大小固定,那么很简单,可以用申请一维数数组再其指针强制转化成为二维数组指针即可。详见代码:

 化成为二维数组指针即可。详见代码:

 
  1. //列大小固定的二维数组可以申请一维数据并将指针强转成二维数组  
  2. #include <stdio.h>  
  3. int main()  
  4. {  
  5.     printf("  列大小固定的二维数组可以申请一维数据并将指针强转成二维数组\n");    
  6.     printf(" -- by MoreWindows( http://blog.csdn.net/MoreWindows ) --\n\n");    
  7.   
  8.     //列值固定  
  9.     const int MAXCOL = 3;  
  10.   
  11.     int nRow;  
  12.     printf("请输入二维数组的行数(列值固定为%d): ", MAXCOL);  
  13.     scanf("%d", &nRow);  
  14.   
  15.     //申请一维数据并将其转成二维数组指针  
  16.     int *pp_arr = new int[nRow * MAXCOL];  
  17.     int (*p)[MAXCOL] = (int(*)[MAXCOL])pp_arr;  
  18.   
  19.     //为二维数组赋值  
  20.     int i, j;  
  21.     for (i = 0; i < nRow; i++)  
  22.         for (j = 0; j < MAXCOL; j++)  
  23.             p[i][j] = i + j;  
  24.       
  25.     //输出二维数组  
  26.     for (i = 0; i < nRow; i++)  
  27.     {  
  28.         for (j = 0; j < MAXCOL; j++)  
  29.             printf("%5d", p[i][j]);  
  30.         putchar('\n');  
  31.     }  
  32.   
  33.     //释放资源  
  34.     delete[] pp_arr;  
  35.     return 0;  
  36. }  
  1. //列大小固定的二维数组可以申请一维数据并将指针强转成二维数组  
  2. #include <stdio.h>  
  3. int main()  
  4. {  
  5.     printf("  列大小固定的二维数组可以申请一维数据并将指针强转成二维数组\n");    
  6.     printf(" -- by MoreWindows( http://blog.csdn.net/MoreWindows ) --\n\n");    
  7.   
  8.     //列值固定  
  9.     const int MAXCOL = 3;  
  10.   
  11.     int nRow;  
  12.     printf("请输入二维数组的行数(列值固定为%d): ", MAXCOL);  
  13.     scanf("%d", &nRow);  
  14.   
  15.     //申请一维数据并将其转成二维数组指针  
  16.     int *pp_arr = new int[nRow * MAXCOL];  
  17.     int (*p)[MAXCOL] = (int(*)[MAXCOL])pp_arr;  
  18.   
  19.     //为二维数组赋值  
  20.     int i, j;  
  21.     for (i = 0; i < nRow; i++)  
  22.         for (j = 0; j < MAXCOL; j++)  
  23.             p[i][j] = i + j;  
  24.       
  25.     //输出二维数组  
  26.     for (i = 0; i < nRow; i++)  
  27.     {  
  28.         for (j = 0; j < MAXCOL; j++)  
  29.             printf("%5d", p[i][j]);  
  30.         putchar('\n');  
  31.     }  
  32.   
  33.     //释放资源  
  34.     delete[] pp_arr;  
  35.     return 0;  
  36. }  

 

运行结果如下所示:

如何在C/C++中动态分配二维数组(1)_c++

 

 

转载请标明出处,原文地址:http://blog.csdn.net/morewindows/article/details/7664479

如果觉得本文对您有帮助,请点击支持一下,您的支持是我写作最大的动力,谢谢。