簡體   English   中英

在Objective-C中更改C樣式數組的元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM