如何声明动态数组?例如:
int k=5;
我想要一个如下所示的数组:
int myArray[k];
答案 0 :(得分:8)
如果我正确地阅读了这个问题..(此时不太可能)
NSMutableArray *myArray = [[NSMutableArray alloc] initWithCapacity:k];
答案 1 :(得分:8)
有时确实需要真正的数组(不是NSArray)。参见例如indexPathWithIndexes:length:在NSIndexPath中,它将uintegers数组作为参数。对于数组分配,您应该使用以下方法:
NSUInteger *arr = (NSUInteger*)malloc(elementsCount * sizeof(NSUInteger) );
arr[0] = 100;
free(arr);
答案 2 :(得分:7)
在Objective-C中,执行此操作的标准方法是使用NSMutableArray
类。这是一个可以容纳任何对象的容器(注意int
不是对象!你必须将整数包装在NSNumber
中。)快速示例:
NSMutableArray* someIntegers = [[NSMutableArray alloc] initWithCapacity:1];
[someIntegers addObject:[NSNumber numberWithInt:2]];
//I've added one thing to my array.
[someIntegers addObject:[NSNumber numberWithInt:4]];
//See how I can put more objects in than my capacity allows?
//The array will automatically expand if needed.
//The array now contains 2 (at index 0) and 4 (at index 1)
int secondInteger = [[someIntegers objectAtIndex:1] intValue];
//Retrieving an item. -intValue is needed because I stored it as NSNumber,
//which was necessary, because NSMutableArray holds objects, not primitives.
答案 3 :(得分:3)
Well in my book it's ok to use VLAs in Objective-C.
类似
int foo = 10;
int bar[foo];
是允许的。当然,这不是动态数组,而是自动调整其大小。但如果您只需要堆栈上的本机数组就可以了。
答案 4 :(得分:1)
您可以使用Objetive-C ++。
首先像这样重命名你的类:MyClass.mm
“。mm”扩展告诉Xcode这个clas是一个Objetive-C ++类,而不是一个Objetive-C类。
那么你可以像这样使用动态C ++数组:
int *pixels = new int[self.view.size.width];
for (int offset = 0; offset = self.view.size.width; offset++) {
pixeles[offset] = rawData[offset];
}
然后你可以在方法中传递“像素”:
Scan *myScan = [[Scan alloc] initWhithArray:pixels];
方法“initWithScan”声明如下:
-(id)initWithArray:int[]pixels;
“initWithScan”实现是这样的:
-(id)initWithScan:int[]pixels {
if (self = [super init]) {
for (int i = 0; i < self.myView.size.width; i++) {
NSLog(@"Pixel: %i", pixels[i];
}
}
return self;
}
我跳这是有用的。