繁体   English   中英

如何在循环中动态构建这样的C数组,返回它并保留引用?

How to build a C array like this dynamically in a loop, return it, and keep a reference?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

现在我有这个设置:

一个NSMutableArray,它存储两个NSMutableArray实例。

for循环遍历一组数据并将值写入这些数组。 这是一个大图/图表,将与OpenGL ES一起显示。

包含两个其他NSMutableArray对象的NSMutableArray由方法返回,并且调用者将其分配给保留属性。

可怜的是:最多可以有2.000个值,我不想创建所有这些NSNumber对象。

现在我希望用C做一个轻量级的方法。

在我走循环之前,我知道数据点的数量。

现在我想重构这个,以便我得到只包含普通旧浮点值的轻量级C数组。 我知道如何创建一个浮点值的C数组,但不是真的动态:

CGFloat values[ ] = {
    0, 2.5f,
    30.2f, 2.5f,
    50.95f, 200.55f,
    930.2f, 122.1f,
};

问题:

1)如何在循环中动态创建这样的数组?

2)我如何将其中两个数组放入一个数组?

3)记忆管理怎么样? 该方法返回多维C数组,接收器需要将其分配给实例变量(property)。 它需要保持一段时间。 我怎么能创建一个实例变量来保存这样一个C-array,而不事先知道它的确切大小?

2 个回复

这将为您提供一个新阵列:

CGFLoat* myArray = malloc(numberOfFloat * sizeof(float));

你可以做像myArray[6] = 0;

当你完成它,你必须调用free(myArray) ,否则你将有内存泄漏。

考虑到这一点,您的实例变量将只是一个CGFloat*

对于第一个问题,您可以使用malloc()动态创建数组,并使用指针变量来存储对其第一个元素的引用。 例如,这将创建一个包含8个CGFloat的数组:

CGFloat *a = malloc(8 * sizeof a[0]);

如果a为非NULL,则可以通常的方式访问a[0]a[7] 您可以将此CGFloat *值返回到另一个函数,并且在完成数组后,必须将此值传递给free()

对于第二个问题,您可以创建一个包含两个动态数组的两个指针的数组:

CGFloat *a[2] = { NULL, NULL };

a[0] = malloc(8 * sizeof a[0][0]);
a[1] = malloc(16 * sizeof a[1][0]);

您现在可以通过a[0][7]a[1][0]a[1][15]访问a[0][0] (只要a[0]a[1]不是NULL )。

但是,这里有一个皱纹:你不能直接在C中返回数组,所以你不能再从函数返回a 可以改为使用两级动态数组,但是首先将指针数组存储在保留对象中可能更有意义,并将对此数组的引用传递给填充它的函数。

这意味着您的包含对象将包含CGFloat *a[2]字段,并且分配动态数组并填充它们的函数将包括CFloat *dest[]参数。 该功能将从以下内容开始:

dest[0] = malloc(8 * sizeof dest[0][0]);
dest[1] = malloc(16 * sizeof dest[1][0]);

...然后正常填写值。

对于第三个问题, malloc()创建的数组将一直存在,直到该指针稍后传递给free() 如上所述,您可以愉快地返回该值并将其存储在其他位置,只要您没有free()free()直到您完成它。

1 如何在for循环中动态引用数组? 批量

好的,所以我的最终目标是遍历一个文本文件,对于文本文件中的每一行,将该行用作数组中的键以存储值1。 然后,循环遍历目录中的文件,并查看该迭代中上述数组中当前文件名是否有值。 我的代码如下 没有产生我期望的结果的确切行是: 我在这里用批处理来盲目编码,所以我猜这很简单。 ...

2 C#循环中动态引用对象

我不知道这是否可行。 我想做的是引用一个DataTable(和其他对象,但是让它工作一个将使其余工作变得容易)并将其用作参数,但是我想循环执行此操作,以便可以执行与每个DataTable dt1,dt2,dt3等一起使用。类似这样的东西(尽管这显然不起作用): 这实际上可行吗? ...

4 在循环中构建数组

我正在编写一个Python程序,一次以10个点的块为单位导入1000个数据点。 从每个10个数据点的块中找到该组的最大值,然后程序循环到接下来的10个数据点并继续。 所有这一切都很好,我只需要构建一个数组来保存每个循环创建一次的最大数据点,所以我可以稍后绘制它们。 我怎样才能在循环中创建这 ...

6 如何在循环中迭代动态大小的数组

我正在使用VB.NET。 我想有一个名为A1的数组,我将在该数组中执行循环。 在for循环的中间,我需要从该A1数组中删除一个项目。 我知道如果我从A1数组中删除该对象,程序将崩溃(超出界限错误消息)。 VB.NET中的哪个数组变量允许我执行上面的任务? 代 ...

7 在 for 循环中创建动态字符串和数组引用

我需要在 for 循环中创建对字符串和字符串数组的动态引用。 以下是否正确? 特别是在我尝试创建动态字符串引用字符串sRef = "svert"+num; 的地方。 然后是一个动态数组引用字符串 arrayRef = "s_array"+num; 欢迎任何反馈。 ...

8 如何在PHP的foreach循环中返回数组

这个问题已经在这里有了答案: 如何在PHP中回显或打印数组? 11个答案 我想在一个函数中进行某些计算,该函数对不同的值取一个常数。 为此,我创建了一个数组,一个变量以及一个循环,该循环将获取数组的每个成员和常量值,并将它们传递给进行计算的函数。 我想要一个数 ...

9 数组如何在“for”循环中工作(C语言)

我在c编程和编程方面相对较新。 1)我正在尝试创建一个名为“input”的数组,该数组将用于用户输入(并且该数组将只使用两个整数元素)。 2)我想使用for循环,所以它遍历我的代码2次,所以我可以复制printf语句“输入一个整数”,而不是多次键入printf语句。 然后我的sca ...

10 如何在Python中的for循环中动态引用数据帧

我对python非常陌生,这可能是一个简单的问题,但是我似乎找不到解决方案。 我有几个熊猫数据框,其名称类似于:output_1,output_2,...,output_n 我想对它们的长度求和(如行数),然后我想到了这样的内容: 问题在于,Python将名称框视为字符串,而 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM