How to make an array of struct in C?

30.6k Views Asked by At

I am making a roguelike game. I want to represent the map as an array of structs, for example having 256 structs in an array. The map is a 16*16 grid of tiles, and each tile has attributes, such as whether there is an item on top of it.

So say that I want an array of 256 of the struct tiles:

struct tiles {
        char type; /* e.g. dirt, door, wall, etc... */
        char item; /* item on top of it, if any */
        char enty; /* entity on top of it, e.g. player, orc if any */
}

Then, I need to access an array of that structs something like this:

int main(void)
{
        unsigned short int i;
        struct tiles[256];

        for (i = 1; i <= 256; i++) {
                struct tiles[i].type = stuff;
                struct tiles[i].item = morestuff;
                struct tiles[i].enty = evenmorestuff;
        }
}
3

There are 3 best solutions below

0
On BEST ANSWER

To declare an array of struct tiles just place this before the variable as you do with other types. For an array of 10 int

int arr[10];  

Similarly, to declare an array of 256 struct tiles

struct tiles arr[256];  

To access any member, say type, of elements of arr you need . operator as arr[i].type

0
On

You need to give your array a name. If an int variable looks like:

int my_int

And an array of ints looks like:

int my_ints[256]

Then an array of struct tiles looks like:

struct tiles my_tiles[256]
0
On

An array is a variable, just like an integer, so you need to give it a name to access it.

Note: the array has a lowest index of 0 and a highest index of 255, so the for loop should be: for (i = 0; i < 256; ++i) instead.

int main(void)
{
        unsigned short int i;
        struct tiles t_array[256];

        for (i = 0; i < 256; ++i) {
                t_array[i].type = stuff;
                t_array[i].item = morestuff;
                t_array[i].enty = evenmorestuff;
        }
}