动态生成二维数组

来源:互联网 发布:js中设计模式有什么 编辑:程序博客网 时间:2024/06/02 23:58

#include<stdlib.h>
#include<unistd.h>
#include<stdio.h>
#define MSGSIZE 16
int main(){
int **arg;
int i,j;
arg=(int**)malloc(MSGSIZE*sizeof(int*));
for(i=0;i<MSGSIZE;i++){
   *(arg+i)=(int*)malloc(MSGSIZE*sizeof(int));
   for(j=0;j<MSGSIZE;j++)
   arg[i][j]=j;
}
for(i=0;i<MSGSIZE;i++){
   for(j=0;j<MSGSIZE;j++)
  printf("%d ", arg[i][j]);
}
return 0;
}

 

 

 

有时根据题意需得根据输入的二维数来动态的创建二维数组,那么此时就不能想以前一样直接定义多少行多少列了。因为不知道行列多少,假如设定太大浪费空间,申请太小完成不了程序的数据存储。因此需要合理的开辟二维空间。
以下的两种方法都可以建立动态的二维空间数组。
方法一:
int i,j;
int r,c;
int **a;  //创建二维指针来指向数组
scanf("%d%d",&r,&c);
a  = (int **) malloc(sizeof(int *) * r);//注意申请的指针格式
for (j=0;j<r;j++){
a[j] = (int *) malloc(sizeof(int) * c);
……
……
}
释放为:
for (j=0;j<r;j++)
free(a[j]);//先释放一维指针
free(a);//最后释放我二维指针
方法二:
建立链表来存放二维数组。
typedef struct arr
{
    int *array;
}arr;
main()
{
    arr *array1;
    int rowx,rowy;
    int i,j,k=0;
    scanf("%d %d",&rowx,&rowy);
    array1=(arr *)malloc(sizeof(arr)*rowx);//创建链表数组
    for(i=0;i<rowx;i++)
                //再在每一个链表中创建一维数组,这样整体就构成二维数组
        array1[i].array=(int *)malloc(sizeof(int)*rowy);
……
……
释放同上:
for (j=0;j<rowx;j++)
free(array1[j].array);
free(array);

http://blog.163.com/kevinlee_2010/

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 网上下载的3d模型渲染很慢怎么办 cad下载完成后出现闪退怎么办 婴儿在肚子里被系带绑到怎么办 我想给外地的朋友送花怎么办 英雄联盟连接不上聊天服务器怎么办 用黄金换玫瑰金后悔了怎么办 劳力士日志系列玫瑰金和黄金怎么办 香菇代进地注水后长满绿毛怎么办 群主给你带了不满意的头衘怎么办 普兰德雪地靴洗变色了怎么办 书被水泡了皱了黏了怎么办 书被水泡了皱了没干怎么办 眼皮干燥起皮起皱怎么办能治好吗 手指头起小水泡指甲不平整怎么办 这几天我的内裤上带点血丝怎么办 一个月宝宝私处捂白了怎么办 工资算了字签了老板没把钱怎么办 百合种球叶子都变黄了怎么办 新买的富贵竹叶子发黄怎么办水养 朋友总是以隐私为借口欺骗我怎么办 三星手机版本低下载不了微信怎么办 选了动漫制作技术但不会画画怎么办 做主播高薪可是心累不愿做了怎么办 pr导出的avi无压缩太大怎么办 捡了个小米max被绑定了怎么办 二十岁时头发开始掉了怎么办 在酒店换衣服忘记关窗帘了怎么办 淘宝店铺装修更改图片要收费怎么办 惠阳市教育考试考证号忘记怎么办 高考完被被骗去读自考以后怎么办 孩子学习遇到瓶颈期了老师该怎么办 微信家长群有不好的言论出现怎么办 铃木汽车后备箱电动锁没有电怎么办 坐飞机没有连号座位带孩子怎么办 白沙的衣服洗衣服时染上颜色怎么办 网购商家少发了货怎么办 我想成为安利的员工怎么办会员 安利皇后锅锅盖吸在桌子上怎么办 淘宝客服退款返佣金诈骗后怎么办 第一试用网的钱提现出现问题怎么办 一个手机号注册两个京东账号怎么办