C/C++动态分配二维数组


一:C中动态分配二维数组

(1)内存不连续的分配   

  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #define M 3
  4. #define N 3
  5. // 这样在同一个数组内是连续分配的,但是实际上是不连续分配的
  6. int main(int argc , char*argv[])
  7. {
  8. int i ,j ;
  9. int **matric ;
  10. matric = (int**)malloc(M*sizeof(int*));
  11. for(i = 0 ; i<M ; i++)
  12. *(matric+i) = (int*)malloc(N*sizeof(int));
  13. for(i = 0 ; i<M ; i++)
  14. for(j=0 ; j<N ; j++)
  15. {
  16. printf("Please entry the %d value:\n",i*N+j);
  17. scanf("%d",(*(matric+i)+j));
  18. }
  19. for(i = 0 ; i<M ; i++)
  20. {
  21. switch(i)
  22. {
  23. case 0 :
  24. printf("第一行数组元素:\n");
  25. break ;
  26. case 1:
  27. printf("第二行数组元素:\n") ;
  28. break ;
  29. case 2:
  30. printf("第三行数组元素:\n") ;
  31. break;
  32. }
  33. for(j = 0 ; j<N ; j++)
  34. {
  35. printf("The values of %d elements are:%d\n",i*N+j,*(*(matric+i)+j));
  36. printf("The pointer position is:%x\n",(*(matric+i)+j)) ;
  37. }
  38. }
  39. for(i = 0 ;i<M ; i++)
  40. {
  41. free(*(matric+i));
  42. }
  43. free(matric) ;
  44. return 0 ;
  45. }

运行结果为:

可以明确看出内存是不连续的。

  • 1
  • 2
  • 3
  • 下一页

相关内容