我正在尝试更改C风格数组的元素。使用NSArray
/ NSMutableArray
不是我的选择。
我的代码是这样的:
int losingPositionsX[] = {0, 4, 8...};
但是当我输入此代码时
losingPositionsX = {8, 16, 24};
要更改数组的数组元素,它有一个错误:“预期表达式”如何制作副本?
答案 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 };