好的,所以我的最终目标是遍历一个文本文件,对于文本文件中的每一行,将该行用作数组中的键以存储值1。 然后,循环遍历目录中的文件,并查看该迭代中上述数组中当前文件名是否有值。 我的代码如下 没有产生我期望的结果的确切行是: 我在这里用批处理来盲目编码,所以我猜这很简单。 ...
提示:本站收集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 数组?
这将为您提供一个新数组:
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()
它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.