c语言动态生成二维数组,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 */

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值