#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
*/