在Objective-C中更改C样式数组的元素

时间:2014-12-26 18:18:47

标签: objective-c

我正在尝试更改C风格数组的元素。使用NSArray / NSMutableArray不是我的选择。

我的代码是这样的:

int losingPositionsX[] = {0, 4, 8...};

但是当我输入此代码时

losingPositionsX = {8, 16, 24};

要更改数组的数组元素,它有一个错误:“预期表达式”如何制作副本?

3 个答案:

答案 0 :(得分:1)

您必须使用memcpy()或循环。

#define ARRAY_SIZE 3
const int VALUES[ARRAY_SIZE] = {8, 16, 24};

for (int i = 0; i < ARRAY_SIZE; i++)
    losingPositionsX[i] = VALUES[i];

或者,使用memcpy()

// Assuming VALUES has same type and size as losingPositions
memcpy(losingPositionsX, VALUES, sizeof(VALUES));
// Same thing
memcpy(losingPositionsX, VALUES, sizeof(losingPositionsX));
// Same thing (but don't use this one)
memcpy(losingPositionsX, VALUES, sizeof(int) * 3);

由于您使用的是支持C99的OS X,因此您可以使用复合文字:

memcpy(losingPositionsX, (int[3]){8, 16, 24}, sizeof(losingPositionsX));

循环是最安全的,并且可能会被编译器优化为与memcpy()相同的机器代码。使用memcpy()进行拼写错误相对容易。

答案 1 :(得分:1)

在C(以及扩展,在Objective C中)中,您不能像这样彼此分配C数组。您使用memcpy复制C数组,如下所示:

int losingPositionsX[] = {0, 4, 8};
memcpy(losingPositionsX, (int[3]){8, 16, 24}, sizeof(losingPositionsX));

重要提示:此解决方案要求两个数组的大小相等。

答案 2 :(得分:1)

我不知道,在内存管理方面,它是否对您有所帮助。但你可以做到

int * losingPositionsX = (int[]){ 0, 4, 8 };
losingPositionsX = (int[]){ 8, 16,  32 };