繁体   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 循环遍历一组数据并将值写入这些 arrays。 这是一个大图表/图表,它将与 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) 我如何将其中两个 arrays 放入一个阵列中?

3) memory 管理怎么样? 该方法返回该多维 C 数组,接收者需要将其分配给实例变量(属性)。 它需要保留一段时间。 在事先不知道它的确切大小的情况下,我如何创建一个实例变量来保存这样的 C 数组?

2 个回复

这将为您提供一个新数组:

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

你可以做类似myArray[6] = 0; .

完成后,您必须调用free(myArray) ,否则您将有 memory 泄漏。

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

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

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

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

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

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[0][0] ] 和通过a[1][15] a[1][0]只要a[0]a[1]不是NULL )。

但是,这里有个问题:你不能直接在 C 中返回 arrays,所以你不能再从 function 中返回a 可以改为使用两个级别的动态 arrays,但首先将指针数组存储在保留的 object 中可能更有意义,然后将对该数组的引用传递给填充的 ZC1C425268E68385D14AB5074C17A。

这意味着您包含的 object 将包含CGFloat *a[2]字段,并且您的 function 分配动态 arrays 并填充它们将包括 a CFloat *dest[] 那 function 会以这样的开头:

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

...然后正常填写值。

对于第三个问题,由malloc()创建的数组将一直存在,直到该指针稍后传递给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 循环中创建对字符串和字符串 Arrays 的动态引用。 以下是正确的吗? 特别是在我试图创建一个动态字符串引用字符串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