[英]Changing the elements of a C-style array in Objective-C
我正在嘗試更改C樣式數組的元素。 使用NSArray
/ NSMutableArray
不是我的選擇。
我的代碼是這樣的:
int losingPositionsX[] = {0, 4, 8...};
但是當我輸入此代碼
losingPositionsX = {8, 16, 24};
更改數組中的數組元素有一個錯誤:“ expected expression”如何制作副本?
您必須使用類似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()
進行拼寫相對容易。
在C中(以及在目標C中的擴展),您不能像這樣相互分配C數組。 您可以使用memcpy
復制C數組,如下所示:
int losingPositionsX[] = {0, 4, 8};
memcpy(losingPositionsX, (int[3]){8, 16, 24}, sizeof(losingPositionsX));
重要:此解決方案要求兩個數組的大小相等。
我不知道這是否對您的內存管理有所幫助。 但是你可以做
int * losingPositionsX = (int[]){ 0, 4, 8 };
losingPositionsX = (int[]){ 8, 16, 32 };
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.