簡體   English   中英

將ac數組保存在內存中,以便以后可以使用指針進行訪問

[英]Keeping a c array in memory, to be able to access it later with a pointer

我想要一個ivar,它是指向ac數組的第一個元素的指針,但是我希望該ivar能夠訪問該c數組中的其他元素。

@interface myClass : NSObject {
    int * _arrayElement;
} 
@end

@implementation myClass
-(id)init {
    self = [super init];
    if (self) {
        int A[50];
        _arrayElement= &A;
    }
    return self;
}
@end

一旦該方法結束,c數組將退出堆棧,並且我無法通過移動指針來訪問其他元素(_arrayElements + 5將給我A [5])。

您需要在堆而不是堆棧上分配數組。 當超出范圍時,系統會回收在堆棧上分配的數組和其他變量,這意味着您不能在聲明它們的函數/塊之外引用它們,從技術上講,這稱為未定義行為,在實踐中通常會導致您的代碼崩潰。 使用malloc 所以代替:

int A[50];
_arrayElement = &A;

只是:

_arrayElement = (int*) malloc(50 * sizeof(int));

完成操作后,請記住要free釋放內存:

free(_arrayElement);

另外,您可以使用newdelete關鍵字分配和取消分配內存C ++樣式:

_arrayElement = new int[50];

並且,釋放內存:

delete[] _arrayElement;

請注意,如果選擇使用newdelete ,則必須將源代碼編譯為Objective-C ++代碼。 要使用Xcode進行操作,將文件的擴展名從.m更改為.mm應該就足夠了。

另一件事是,如果可以使用C ++構造函數和庫,則可以考慮使用std::vector<int>而不是int * ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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