Chinaunix首页 | 论坛 | 博客
  • 博客访问: 36793
  • 博文数量: 7
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 67
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-24 11:36
文章分类

全部博文(7)

文章存档

2016年(7)

我的朋友
最近访客

分类: C/C++

2016-08-26 16:55:27

前言这里针对一维动态数组和二维动态数组分别在C和C++中如何申请,一直觉得malloc()和new()不好用,用管了vector来实现维度不确定的一维和二维数组,结果今天懵逼了,遇到必须传入int **arr问题,突然之间忘记不能用vector  arr,然后就悲剧了,唉!给自己一个教训,复习一下动态数组的申请
以int型为主:m:行,n:列   
(一)
(1)C实现一维动态数组
     int *arr = (int *)malloc(sizeof(int) *n);   //申请一个大小为n的以为数组
注意:不能写成 int arr[] = (int *)malloc(sizeof(int)*n);   //VC报错:error C2440: 'initializing' : cannot                                                                                                  convert from 'int *' to 'int []'
         也不能写成 int arr[n];     // 报错n大小不能确定
(2)C实现二维动态数组申请
     
        int m,n;                            //申请一个m行n列的二维动态数组
        scanf("%d,%d",&m,&n);
        int **arr = (int **)malloc(m * sizeof(int *));   //m行 ,m个一维指针
        for (int i=0; i             arr[i] = (int *)malloc(sizeof(int)* n);  //n列,每个指针指向一个n个元素的一维数组
        }
(二)C++中实现动态数组申请:new /delete,    STL中的vector
(1)一维数组申请
        int *arr = new int[n];   //申请一个大小为n的int 型数组
       delete [] arr;   //释放申请的空间
注意:同样不能写成 int arr[] =new int[n];  
         也不能写成    int arr[n];     // 报错n大小不能确定
或者使用: vector  
       vector arr(n) ;  //申请一个大小为n的int 型数组

(2)二维数组申请
      int **arr = new int *[m]  ;   //申请有m个指针的数组
      for(int i=0;i {
       }
     //释放申请的内存
     for(int i = 0;i {
           delete []  arr[i];
     }
    delete [] arr;
或者使用vector> arr(m,vector>(n) ) ; //申请m行n列的二维数组
总结:对于二维数组的动态申请,无论是C中malloc,还是C++中的new都可以实现,但是相对于STL中简单粗暴的vector来说,他哥两似乎有点不如vector好用,然而,还是得好好记住,比如本女子许久不用,只是觉得vector好用,然后就哪哪都是用vector,然后比如人家直接要求的必须用二级指针的题目,也许就是瞬间失忆了一样,记不起来,先写到这,算是教训,也是总结。
阅读(1955) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~