c语言malloc申请三维数组,用malloc为三维数组分配空间
发布日期:2021-09-12 18:41:45 浏览次数:38 分类:技术文章

本文共 1708 字,大约阅读时间需要 5 分钟。

#include

#include

#include

//

//

// Code By  : LiJia, http://blog.csdn.net/imjj

// Date     : 2007-05-04

// Purpose  : a multdim, dynamic array show

//

struct Array

{

int dim;

int * dims;

int * data;

};

Array * array_create(int dim, ...)

{

if (dim < 1 )

return NULL;

int i;

int * dims;

int total_elems = 1;

Array * array = NULL;

// parse arguments

va_list argptr;

va_start(argptr, dim);

dims = (int*)malloc(dim * sizeof(int));

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

{

dims[i] = va_arg(argptr, int);

total_elems *= dims[i];

}

// create the array

array = (Array*)malloc(sizeof(Array));

array->dim = dim;

array->dims = dims;

array->data = (int*)malloc(total_elems * sizeof(int));

return array;

}

void array_free(Array * array)

{

free(array->dims);

free(array->data);

free(array);

}

int * array_get(Array * array, ...)

{

int i, j;

int pos = 0;

int n;

int exp;

va_list argptr;

va_start(argptr, array);

for(i = 0; i < array->dim; i++)

{

n = va_arg(argptr, int);

//TODO: check n in range [0, array->dims[i]] here

exp = 1;

//TODO: a more effective pos calculate algorithm

for (j = array->dim - 1; j > i; j--)

exp *= array->dims[j];

pos += n * exp;

}

return array->data + pos;

}

int array_size(Array * array)

{

int size = 1;

int i;

for (i = 0; i < array->dim; i++)

size *= array->dims[i];

return size;

}

const int I = 5, J = 5, K = 5;

int main(int agrc, char * argv [])

{

Array * array = array_create(3, I, J, K); // create a 3 dim and size [5][5][5] array

int i, j, k;

int size = array_size(array);

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

array->data[i] = (i + 1);

for(int i = 0; i < I; i++)

{

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

{

for (k = 0; k < K; k++)

printf("a[%d][%d][%d] = %d\n",

i, j, k,

*array_get(array, i, j , k));

}

}

array_free(array);

return 0;

}

转载地址:https://blog.csdn.net/weixin_39610594/article/details/117243241 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:c语言mallor使用方法,温州医学院仁济临床医学概论选择题整理
下一篇:c语言擦除ext4文件系统,关闭ext4文件系统的日志功能

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月10日 18时21分50秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

Spring注解驱动开发第47讲——Spring IOC容器创建源码解析(七)之初始化所有剩下的单实例bean(下) 2019-04-27
Spring注解驱动开发第48讲——Spring IOC容器创建源码解析(八)之完成BeanFactory的初始化创建工作,最终完成容器创建 2019-04-27
Spring注解驱动开发第49讲——Spring IOC容器创建源码解析(九)之Spring IOC容器创建源码总结 2021-06-30
IntelliJ IDEA快速入门 | 第一篇:你不会还不知道IntelliJ IDEA吧!不要太low哦! 2021-06-30
Spring Boot 2从入门到入坟 | 底层注解篇:@ConfigurationProperties配置绑定 2021-06-30
Spring Boot 2从入门到入坟 | 自动配置篇:源码分析之自动包规则原理 2021-06-30
Spring Boot 2从入门到入坟 | 自动配置篇:源码分析之初始加载自动配置类 2021-06-30
Spring Boot 2从入门到入坟 | 最佳实践篇:Spring Boot应用该如何编写? 2021-06-30
Spring Boot 2从入门到入坟 | 最佳实践篇:使用Lombok插件来简化JavaBean的开发 2021-06-30
Spring Boot 2从入门到入坟 | 最佳实践篇:devtools开发者工具的简单使用 2021-06-30
Spring Boot 2从入门到入坟 | 最佳实践篇:Spring Initailizr的使用 2021-06-30
Spring Boot 2从入门到入坟 | 配置文件篇:yaml语法详解 2021-06-30
Eclipse环境下如何配置Tomcat,并且把项目部署到Tomcat服务器上 2021-06-30
如何将Eclipse中的Web项目自动部署到Tomcat? 2021-06-30
Java Web基础入门第八讲 Java Web开发入门——初始WEB服务器 2021-06-30
Java集合框架——Map 2021-06-30
常用API(一)——String、StringBuffer与基本类型包装类 2021-06-30
第三章——构建模块 2021-06-30
复习反射 2021-06-30
我终于有了一个GitHub了 2021-06-30