Rory Harvey
Rory Harvey

Reputation: 2616

Returning a 2D C array from an Objective-C function

I want to do achieve something like this in Objective-C

+(int[10][10])returnArray
{
    int array[10][10];
    return array;
}

However, this gives an "array initializer must be an initializer list" compiler error. Is this at all possible?

Upvotes: 7

Views: 4602

Answers (2)

Jasper Blues
Jasper Blues

Reputation: 28756

Another way you can do it with objective C++, is to declare the array as follows:

@interface Hills : NSObject
{


@public
    CGPoint hillVertices[kMaxHillVertices];
}

This means the array is owned by the Hills class instance - ie it will go away when that class does. You can then access from another class as follows:

_hills->hillVertices 

I prefer the techniques Carl Norum describes, but wanted to present this as an option that might be useful in some cases - for example to pass data into OpenGL from a builder class.

Upvotes: 1

Carl Norum
Carl Norum

Reputation: 224884

You can't return an array (of any dimension) in C or in Objective-C. Since arrays aren't lvalues, you wouldn't be able to assign the return value to a variable, so there's no meaningful for such a thing to happen. You can work around it, however. You'll need to return a pointer, or pull a trick like putting your array in a structure:

// return a pointer
+(int (*)[10][10])returnArray
{
    int (*array)[10][10] = malloc(10 * 10 * sizeof(int));
    return array;
}

// return a structure
struct array {
  int array[10][10];
};

+(struct array)returnArray
{
   struct array array;
   return array;
}

Upvotes: 9

Related Questions