二维数组,结构体动态申请内存空间

时间:2021-07-01 04:29:14

        在C语言中,申请一般数组时,数组大小必须是常量。即使是赋了特定值的变量,也不行,比如:int n=3;int a[3];这样的做法是错误的,我们需要动态申请数组内存,如下申请一个动态整数(int)二维数组:

#include<stdio.h>
#include<stdlib.h>
int **pp(int m,int n)
{

int i,j,**pa;

pa=(int **)malloc(sizeof(int)*m);//m行的存储空间

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

pa[i]=(int*)malloc(sizeof(int)*n);//n列的存储空间

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

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

pa[i][j]=0;

return pa;

}
main()
{

int m,n,i,j,**haha;

printf("请输入二维数组的行和列:");

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

haha=pp(m,n);

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

{

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

   printf("%d\t",haha[i][j]);

printf("\n");

}

}

效果如下图所示:

二维数组,结构体动态申请内存空间

        结构体也一样,以下定义一个结构体student,为了简单起见,就用一个属性sAge,我们来看看怎样动态申请内存。

#include<stdio.h>

#include<stdlib.h> //引用指针空间

struct student //定义一个结构体student
{
int sAge;//属性,4字节
};
main()
{
int n=2;//定义结构体的大小的变量,可以使任意数值
struct student *pA; //只能用指针的形式动态申请内存
pA=(struct student *)malloc(sizeof(struct student)*n);//每一行的大小(4字节)*行数
pA->sAge=20;//这里是箭头,不是小数点
printf("%d\n",pA->sAge);
pA++;//一次递加4
pA->sAge=21;
    printf("%d\n",pA->sAge);

}

结果如下图所示:

二维数组,结构体动态申请内存空间