欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

[ 1001] 动态开辟二维数组的说明

发布时间:2025/6/15 编程问答 35 豆豆
生活随笔 收集整理的这篇文章主要介绍了 [ 1001] 动态开辟二维数组的说明 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

开辟二维数组的说明 

  

  图解  [1][][][][]

        [2][][][][]

        [3][][][][]

void main()

{         

int i,j;

/*注意申请的指针格式  先创建的是1,2,3首地址为指向指针的指针a来代表 1,2,3所在地址*/

int **a = (int **) malloc(sizeof(int *) * 3);

/* 循环创建了3个 1*4的数组 并将首地址给了 1,2,3的位置上*/

for (j=0;j<3;j++)

{

a[j] = (int *) malloc(sizeof(int) * 4);

}


for (i=0;i<3;i++)

  {

  for (j=0;j<4;j++)

    {

a[i][j]=i+j;/* 使用的区域就是1,2,3后面的 3*4个 int 整型空间 */

    printf("%d ",a[i][j]);

    }

  printf("\n");

  }

   for (j=0;j<3;j++)

  {

   free(a[j]);  /* 先释放1,2,3上的指针指向的3片区域 */

   }


free(a);   /* 最后释放,能指向1,2,3的指针*/

}/*******************

0 1 2 3

1 2 3 4

2 3 4 5

以下也是 这结果

*******************/

void main()

{

   int *temp;

   int m=3,n=4,i,j;

   int **a = (int **)malloc(m*sizeof(int *));

   temp=(int *)malloc(m*n*sizeof(int));

   for(  i=0;i<m;i++)

   {

     // a[i] = temp+n;  /* 关于网站(http://bbs.csdn.net/topics/200005906)里的讨论,试了一下均可以*/

     a[i] = temp+n*i;

      for(  j=0;j<n;j++)

         

       {

       a[i][j]=i+j;

       printf("%d ",a[i][j]);

        }

   printf("\n");

    }

   free(temp);

   free(a);

}







void main()

{

 

    int *temp;

    int m,n;

    printf("Input the m,n:");

    scanf("%d%d",&m,&n);

    temp=(int *)malloc(m*n*sizeof(int));

    for(int i=0;i<m;i++)

        for(int j=0;j<n;j++)

        {

            printf("Input the data: ");

            scanf("%d", &temp[i,j]);  //好象直接这样子就可以的,

        }

    for (int i=0; i<m; i++)

        for(int j=0; j<n; j++)

            printf("%d ", temp[i,j]);

 

    return 0;

}

}

/*******************

2 2 2

2 2 2 

*******************/

 

void main()

{

 int (*a)[0] = malloc(sizeof(int)*3*4);  /* 不用写明转换类型的版本 */

 int i=0,j=0;

 

for (i=0;i<3;i++)

  {

  for (j=0;j<4;j++)

    {

a[i][j]=i+j; 

    printf("%d ",a[i][j]);

    }

  printf("\n");

  } 


}


 //结构体的方式 不便于写访问

main()

{

    arr *array1;

    int rowx=3,rowy=4;

    int i,j,k=0;

     

    array1=(arr *)malloc(sizeof(arr)*rowx);//创建链表数组

    for(i=0;i<rowx;i++)  //再在每一个链表中创建一维数组,这样整体就构成二维数组

   array1[i].array=(int *)malloc(sizeof(int)*rowy);

 

}


malloc连续开辟性 但在以上方法中,先一维再循环开辟二维中并不能保证 空间是连续的 与直接定义 int A[3][4];不一样;

/* c++(http://blog.csdn.net/vipygd/article/details/5909817)里面写了写新的方法 */


转载于:https://blog.51cto.com/wz609/1725824

总结

以上是生活随笔为你收集整理的[ 1001] 动态开辟二维数组的说明的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。