oskob
oskob

Reputation: 1376

Array of arrays with ints

How would you go about storing a 2 dimensional array of ints as a class variable?

If you want an array of ints you go:

Class declaration

int * myInts;

Implementation

int ints[3] = {1,2,3};
myInts = ints;

But what if you want to store an array of arrays with ints?

Like this:

 int ints[3][3] = {{1,2,3}, {1,2,3}, {1,2,3}};

I don't wanna limit the size of the arrays in the class declaration so I guess I have to go with pointers, but how?

Upvotes: 0

Views: 176

Answers (3)

oskob
oskob

Reputation: 1376

For future reference, this is my conclusion:

Class declaration

 int ** ints;

Implementation

 int rows = 2;
 int cols = 5;

 ints = (int**)malloc(rows*sizeof(int*));
 ints[0] = (int*)malloc(cols*sizeof(int));

 ints[0][0] = 123;
 ints[0][1] = 456;
 ints[0][2] = 789;
 // etc

This is my own interpretation of links provided in comments and my C skills are pretty low so take that into consideration ;) Maybe there are better ways to put in multiple numbers at a time with {123,456,789} or something, but that is beyond my requirements for now!

Upvotes: 1

Daniel Pereira
Daniel Pereira

Reputation: 1785

If you want to dynamically allocate memory, in other words define the size of the arrays at runtime, then you need to declare the array as a pointer, malloc it, and then add another array of ints to each index at runtime. You can't really declare and dynamically allocate at the class level. If you are using cocoa/iphone sdk you can use NSMutableArray.

You could also create your own class that constructs a two dimensional array and exposes methods to push and pop int objects like [IntegerArray push:x,y,n];

Here's and example of using a double reference as Daniel R Hicks pointed out.

Upvotes: 0

Nekto
Nekto

Reputation: 17877

I've wrote sample for you:

int N = 10, M = 15;
NSMutableArray *ints = [NSMutableArray arrayWithCapacity:N]; // array[N][M]
for (int i=0; i<N; i++)
{
    NSMutableArray *arr = [NSMutableArray arrayWithCapacity:M];
    for (int j=0; j<M; j++)
    {
        [arr addObject:[NSNumber numberWithInt:(i+1)*(j+1)]];
    }
    [ints addObject:arr];
}
// print
for (int i=0; i<[ints count]; i++)
{
    NSString *line = @"";
    NSMutableArray *arr = [ints objectAtIndex:i];
    for (int j=0; j<[arr count]; j++)
        line = [NSString stringWithFormat:@"%@ %@", line, [arr objectAtIndex:j]];
    NSLog(@"%@", line);
}

Upvotes: 0

Related Questions