c语言动态创建二维数组的方法

#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#include"malloc.h"

//动态创建二维数组方法一:
typedef enum{
 style_char,
 style_short,
 style_int
}Array2Style;

typedef struct{
 int line;
 int row;
 Array2Style style;
 void * p;
}DynamicArray2;

void initArray2(DynamicArray2 * array2,int line,int row,Array2Style style)
{
 int unitLen = 0;
 if(style == style_char)unitLen = 1;
 else if(style == style_short)unitLen = 2;
 else if(style == style_int)unitLen = 4;
 array2->p = (void *)malloc(line * row * unitLen);//
 array2->line = line;
 array2->row = row;
 array2->style = style;
}
//获得数组元素指针
void * getArray2DataPtr(DynamicArray2 * array2,int line,int row)
{
 int unitLen = 0;
 if(array2->style == style_char)unitLen = 1;
 else if(array2->style == style_short)unitLen = 2;
 else if(array2->style == style_int)unitLen = 4;

 if(array2->style == style_char)return (void*)((char*)array2->p + line * array2->row + row);
 else if(array2->style == style_short)return (void*)((short*)array2->p + line * array2->row + row);
 else if(array2->style == style_int)return (void*)((int*)array2->p + line * array2->row + row);

 return NULL;
}

//void *

void main(void)
{
 int i,j;
 char k = 'a';
 DynamicArray2 arr2;
 initArray2(&arr2,1,26,style_char);
 for(i = 0 ;i < arr2.line;i ++)
 {
  for(j = 0;j < arr2.row;j ++)
  {
   *(char*)getArray2DataPtr(&arr2,i,j) = k++;
  }
 }
 for(i = 0 ;i < arr2.line;i ++)
 {
  for(j = 0;j < arr2.row;j ++)
  {
   printf("%c ",*((char*)getArray2DataPtr(&arr2,i,j)));
  }
 }
 free(arr2.p);
}

//动态创建二维数组方法二:
/*
#if 1
void main(void)
{
 int i,j,k = 0;
 char ** twoarray = 0;
 int line = 4;
 int cow = 4;
 twoarray = (char **)malloc(line * sizeof(char *));
 for(i = 0;i < line;i ++)
 {
  twoarray[i] = (char *)malloc(cow * sizeof(char));
 }
 for(i = 0;i < line;i ++)
 {
  for(j = 0;j < cow;j ++)
  {
   twoarray[i][j] = 'a' + k ++;
  }
 }
 for(i = 0;i < line;i ++)
 {
  for(j = 0;j < cow;j ++)
  {
   printf("%c",twoarray[i][j]);
  }
 }
}

#endif
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值