关闭

用malloc动态申请一个二维数组的三种方法

7960人阅读 评论(1) 收藏 举报
分类:

方法一:利用二级指针申请一个二维数组。

#include<stdio.h>
#include<stdlib.h>


int main()
{
    int **a;  //用二级指针动态申请二维数组
    int i,j;
    int m,n;
    printf("请输入行数\n");
    scanf("%d",&m);
    printf("请输入列数\n");
    scanf("%d",&n);
    a=(int**)malloc(sizeof(int*)*m);
    for(i=0;i<m;i++)
    a[i]=(int*)malloc(sizeof(int)*n);
    for(i=0;i<m;i++)
    for(j=0;j<n;j++)
    printf("%p\n",&a[i][j]);     //输出每个元素地址,每行的列与列之间的地址时连续的,行与行之间的地址不连续
    for(i=0;i<m;i++)
    free(a[i]);
    free(a);
    return 0;
}


方法二:用数组指针形式申请一个二维数组。

#include<stdio.h>
#include<stdlib.h>


int main()
{
      int i,j;
  //  申请一个3行2列的整型数组
    int (*a)[2]=(int(*)[2])malloc(sizeof(int)*3*2);
    for(i=0;i<3;i++)
    for(j=0;j<2;j++)
    {
       
       printf("%p\n",&a[i][j]);

    } //输出数组每个元素地址,每个元素的地址是连续的
    free(a);
    return 0;
}


方法三:用一个单独的一维数组来模拟二维数组。

#include <stdio.h>
#include <stdlib.h>
void main()
{
int nrows,ncolumns;
int *Array;
int i,j;
printf("please input nrows&ncolumns:\n");
scanf("%d%d",&nrows,&ncolumns);
Array=(int *)malloc(nrows*ncolumns*sizeof(int *));
for(i=0;i<nrows;i++)
{
for(j=0;j<ncolumns;j++)
{
Array[i*nrows+j]=1;
printf("%d ",Array[i*nrows+j]); //用 array3[i * ncolumns + j] 访问第 i, j 个成员
}
printf("\n");
}
free(Array);
}









11
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:64993次
    • 积分:1316
    • 等级:
    • 排名:千里之外
    • 原创:59篇
    • 转载:2篇
    • 译文:0篇
    • 评论:27条
    博客专栏
    最新评论