首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将3D数组实现为指向可变长度数组的指针

将3D数组实现为指向可变长度数组的指针
EN

Stack Overflow用户
提问于 2022-01-26 09:08:34
回答 1查看 94关注 0票数 2

我刚刚在C中了解了可变长度数组,有人建议我可以在C中实现一个类似3D数组的对象,只需作为指向可变长度数组的指针。一个简单的实现如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
#include <stdlib.h>

int main( int argc, char *argv[] ) {

    size_t  ii, jj, kk,
            Nx, Ny, Nz;

    Nx  = 2;
    Ny  = 3;
    Nz  = 4;

    // initialize 3D array as pointer to a variable length array
    double (*arr3d)[Ny][Nz] = calloc(Nx, sizeof *arr3d);

    for( ii=0 ; ii<Nx ; ++ii )
        for( jj=0 ; jj<Ny ; ++jj )
            for( kk=0 ; kk<Nz ; ++kk )
                printf( "arr3d[%ld,%ld,%ld] = %f, address = %p\n",
                    ii, jj, kk, arr3d[ii][jj][kk], &arr3d[ii][jj][kk] );

    free(arr3d);
    return 0;

}

根据我的理解,一个优点(除了一行实现)是arr3d可以简单地传递给一个函数,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int doSomething( size_t dim1, size_t dim2, size_t dim3, double arr3d[dim1][dim2][dim3] );

通过在main函数中调用此函数,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
doSomething( Nx, Ny, Nz, arr3d );

我现在的问题是,这是三维数组类对象的有效实现,还是会遇到一些麻烦?注意,在实际情况下,尺寸大约是每个1000倍的大。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-26 09:19:59

如果您有一个数组,如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
double a[Nx][Ny][Nz];

然后你可以写

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
double (*arr3d)[Ny][Nz]  = a;

即指针arr3d指向具有double{Nt][Nz]类型的数组a的第一个元素。

所以这个内存分配

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
double (*arr3d)[Ny][Nz] = calloc(Nx, sizeof *arr3d);

是对的。实际上,动态分配了一个三维数组,指针arr3d指向数组的第一个元素。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70867455

复制
相关文章
js获取数组的最后一个元素
下面是js获取数组最后一个元素的三种方式 一、JavaScript pop() 方法 pop() 方法用于删除并返回数组的最后一个元素。 注意:pop() 方法将删除 arrayObject 的最后一个元素,把数组长度减 1,并且返回它删除的元素的值。如果数组已经为空,则 pop() 不改变数组,并返回 undefined 值。 var arr = new Array("js","JavaScript","jQuery"); var end = arr.pop() console.log(end);//
用户2323866
2021/06/23
12.9K0
javascript 数组排序,找到相同元素[通俗易懂]
小白前端一个,公司项目,里面有一个数组增加,删除,去重,排序,找到相同元素个数等等…
全栈程序员站长
2022/08/14
1K0
js数组最后一个元素多种获取方法总结
因为数组索引是从0开始,所以我们可以通过访问数组长度减去1,这样就达到了访问最后一个元素的目的。
IT工作者
2021/12/29
4K0
js算法之删除数组最后一个元素
function truncate(arr) { var arr1=arr.slice(0,arr.length-1); return arr1; } 思路:先截取出来除了最
贵哥的编程之路
2021/03/26
5K0
js算法之删除数组最后一个元素
php获取数组第一个或者最后一个元素
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/105850.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/09
1.6K0
JS数组at函数(获取最后一个元素的方法)介绍
首先,我们可以思考如下一个问题,如果要获取一个数组的最后一个元素(这是很常用的操作),我们应该怎么做? 相信大部分人能够想到的代码是这样的:
用户3158888
2022/06/16
4.8K0
为什么这段代码输出的是”Hello World”
Stackoverlfow.com上有一篇有趣的讨论帖: 在这篇帖子里提到了如下的程序: 明明是在程序里使用了java.util.Ramdom()函数产生随机数,为什么每次打出的结果都是Hello w
哲洛不闹
2018/09/14
9930
为什么这段代码输出的是”Hello World”
关于数组的最后一个元素之后是否需要追加”,”(逗号)
因为接触的东西越来越多,阅读的内容也越来越丰富,最近就产生了一个困惑:“当我们写数组时,是否需要在数组的最后一个元素之后追加一个逗号”
Yiiven
2022/12/15
2.4K0
为什么这段代码输出的是”Hello World”
Stackoverlfow.com上有一篇有趣的讨论帖: 在这篇帖子里提到了如下的程序: 明明是在程序里使用了java.util.Ramdom()函数产生随机数,为什么每次打出的结果都是Hello w
哲洛不闹
2018/09/19
1K0
为什么这段代码输出的是”Hello World”
「中国台湾精益老专家」实践一日 Sprint 的个人看板
实践一日 Sprint 的个人看板(一个人的敏捷开发) 【待办事项】 你的生活应该包含一大堆任务(或许你喜欢用工作、事务或是想做的事,任务这二个字只是我习惯的用词,因为乍听起来有Tom Cruise的
DevOps时代
2018/04/08
1.1K0
「中国台湾精益老专家」实践一日 Sprint 的个人看板
【实战】用原生的 JavaScript Intersection Observer API 实现 Lazy Loading
前一阵子在做一个项目的时候,因为每组数据都要先通过很庞大的计算,才把计算后的结果 Render 到页面上,但这样就导致如果单页查出来的数据超过大概 5 笔,就会需要等待一段有感的时间,才能看到结果出现在画面上。
前端小智@大迁世界
2022/03/22
4280
【实战】用原生的 JavaScript Intersection Observer API 实现 Lazy Loading
代码审查|这段代码,为什么复制文件夹总是“成功”?
最近开始一个人负责整个项目的全栈开发和维护,工作中没了和同事交叉 code review 的环节,所以就打算,如果工作中遇到一些比较典型的代码,包括好味道和坏味道,就拿出来分析下,与大家一起交流,作为另一种形式的「交叉 review」。
mzlogin
2023/10/23
1240
java 输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/153342.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/13
1.6K0
Java输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/153328.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/13
1.7K0
【类型挑战】最后一个元素,难度⭐️⭐️
Dear,大家好,我是“前端小鑫同学”,😇长期从事前端开发,安卓开发,热衷技术,在编程路上越走越远~ 知识运用: 条件类型的使用:文档地址 infer关键字也参照条件类型使用的文档 在泛型中对类型做约束:文档地址 索引访问类型:文档地址 题目分析: 题目地址:15-medium-last 如上图所示,我们需要设计的通用类型工具需要满足重一个数组中取出最后一个元素来当我们的输出类型。本题和我们一开始取数组类型第一个元素一样。 题目解答: 测试用例: 需满足两个测试用例,分别将使用Last类型工具的到
前端小鑫同学
2022/12/26
9490
【类型挑战】最后一个元素,难度⭐️⭐️
在数组中查找次大值,并与最后一个元素交换—C语言
/*************************************************** 作业要求: 在数组中查找次大值,并与最后一个元素交换 完成日期: 2013年9月3日 ***************************************************/ #include <stdio.h> // 函数原型 int findSecondMaxValueInArray(int a[], int n); // main函数 int main(void) {
WindCoder
2018/09/20
2.7K0
[脑书笔记]《你为什么而工作》:请尊重你自己
核心内容:我们为什么要工作?我们为什么要放弃既快乐又刺激的安逸生活,每天早晨睡眼惺忪地从舒适的床上挣扎而起?多么愚蠢的问题啊。我们工作当然是因为我们要养家糊口。确实如此,但仅此而已吗?当然不是!巴里•施瓦茨发现两个多世纪以来,我们完全被亚当•斯密等经济学大师的观点误导了,无论是社会,还是个体的人,我们一直被灌输着关于工作的一些错误观点。
rocket
2018/09/14
5560
[脑书笔记]《你为什么而工作》:请尊重你自己
请解释一下String为什么不可变?
不可变对象是指一个对象的状态在对象被创建之后就不再变化。不可改变的意思就是说:不能改变对象内的成员变量,包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引用类型指向的对象的状态也不能改变。
剑走天涯
2019/09/04
1.8K0
零基础的小明要如何成为前端工程师?
如果你是个毫无基础又想要转岗成前端工程师的迷惘初学者,你脑中浮现的第一个问题有八成会是这个。接下来你会做什么?你大概会用:「如何成为前端工程师」、「前端 入门」、「前端 转岗」、「前端 非本科」等等的关键字来搜索,然后呢?
苏南
2020/12/16
4030
零基础的小明要如何成为前端工程师?
在排序数组中查找元素的第一个和最后一个位置
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
代码随想录
2021/12/15
4.7K0

相似问题

getGenericSuperclass()它怎麽工作?

15

`#if canImport(.)`。它怎麽工作?

229

循环数组[i++]。它怎麽工作?

21

Timeit Python。它怎麽工作?

21

方法重载。它怎麽工作?

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文