2014-12-05 44 views
0

作为一名iOS程序员,我有时会钻研C以获得更快的结果(实际上是为了好玩),并且我努力在函数调用中修改C数组的值。虽然我认为这个答案可能有所帮助(Modifying a array in a function in C),但我不知道从哪里开始实施它。在objective-c函数中修改C数组

目前我有:

[object.guestlists enumerateObjectsUsingBlock:^(id obj, BOOL *stop) { 

    NSObject *someNSObject = [NSObject new]; 

    NSInteger array[3] = {totalIncomingMales,totalIncomingFemales, 
         totalIncomingGuestsCount}; 

    [self callMethod:object withCArray:cArray]; 

}]; 


- (void) callMethod:(NSObject*) object withCArray:(NSInteger*) cArray { 

    // do something with that object 

    NSInteger totalIncomingMales = cArray[0], 
       totalIncomingFemales = cArray[1], 
       totalIncomingGuestsCount = cArray[2]; 

    // modify these integers internally so that the C-array passed in is also modified 

} 

显然,这传递一个指针,因此不修改该值。我尝试用NSInteger **替换NSinteger *并且使得例如 例如totalIncomingMales = * cArray [0],但唉,我无法通过c数组作为参数(即使与&符号)。

一些有用的材料和潜在的解决方案,将不胜感激!

+0

您只能在NSObjects及其子类中使用**。 NSInteger只是一个原始的int。我相信*和/应该工作。 – 2014-12-05 13:29:16

+0

'arrayOfIntegers'来自哪里? – Paulw11 2014-12-05 13:32:51

+0

对不起,已编辑。我想,我尝试使用&符号。让我再试一次 – Rambatino 2014-12-05 13:38:50

回答

1

不知道是否我明白你的问题,但它似乎是小事一桩:

- (void) callMethod:(NSObject*) object withCArray:(NSInteger*) cArray { 
    // modify these integers internally so that the C-array passed in is also modified 
    cArray[0] = 10; 
    cArray[1] = 20; 
    cArray[2] = 30; 
} 


- (void) myMethod:(NSString *) myConstString array: (NSArray *) myArray 
{ 
    NSInteger array[3] = {1,2,3}; 
    NSLog(@"%ld %ld %ld", (long)array[0],(long)array[1],(long)array[2]); 
    [self callMethod:nil withCArray:array]; 
    NSLog(@"%ld %ld %ld", (long)array[0],(long)array[1],(long)array[2]); 
} 

结果将是: 1,2,3 后10,20,30。没有指针技巧需要,因为你告诉它它是NSInteger,所以编译器会为你做。

+0

就是这样。这是我的错,我不应该把它们分配给新的变量。所以dum。 – Rambatino 2014-12-05 14:29:32