用内存申请实现动态二维数组的创建及打印(每行的元素个数不同)

这是我嵌入式培训的时候老师留的课后题,说的是:做一个二维数组,行数不定,每行元素个数可以不同,数组内元素全部为1,然后打印出来。

不废话,直接上代码

#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
int main()
{
  int i = 0;
  int j = 0;
  int s = 0;
  int m = 0;
  int **p=NULL;
  int *a= NULL;
  printf("请输入您想要的行数:");   //获取行数
  scanf("%d",&s);
  p=(int**)malloc(s*sizeof(int*));   //申请行数内存
  a=(int*)malloc(s*sizeof(int));     //申请记录行数的数组的空间
  if ( p==NULL )
   { 
  printf("内存溢出,失败");
  exit(0); 
   } 
  for(i = 0;i < s;i ++)    //循环创建不同行的不同数量的元素
  {
 printf("\n请输入第%d行的元素个数:",i);
 scanf("%d",&j);
 a[i]=j;
 p[i] = (int*)malloc(j*sizeof(int));   //申请对应行的列数内存
 if ( p[i]==NULL )
 { 
 printf("内存溢出,失败");
 exit(0); 
   } 
 for(m = 0 ; m < j ; m++)
 {
 p[i][m]=1;                //数组赋值均为1
 }
  }
 /*for(i = 0;i < s;i++) {
 for(j = 0;p[i][j] != '\0';j++)
 {
 p[i][j] = 1;
 }
  }*/
  printf("全部元素打印如下:\n");
  for(i = 0 ; i < s ; i ++) {
 for( j = 0;j {
 printf("%d",p[i][j]);
 }
 printf("\n");
  }
  for (i = 0;i < s;i++) 
  { 
 free(p[i]); 
 p[i] = NULL; 
  } 
      free(p); 
      p = NULL; 
 free(a);
 a= NULL;                     //释放内存
      printf("内存清理完毕!\n");
 return 1;
}


运行截图:



特意注释了下,相信是能看懂的吧1

你可能感兴趣的:(C/C++)